Tôi muốn xoay một CGPoint trên màn hình tùy thuộc vào góc và xoay được neo vào một điểm khác. Đã tự hỏi cách hiệu quả nhất để làm điều này là gì?Cách tốt nhất để xoay CGPoint trên lưới là gì?
Trả lời
Bạn cũng có thể sử dụng:
rotatedPoint = CGPointApplyAffineTransform(initialPoint, CGAffineTransformMakeRotation(angle));
EDIT: để thực hiện luân chuyển quanh điểm tùy chỉnh bạn phải làm như Adam được mô tả trong câu trả lời của mình. Sử dụng CGAffineTransform phải có dạng như sau:
CGAffineTransform translateTransform = CGAffineTransformMakeTranslation(customCenter.x, customCenter.y);
CGAffineTransform rotationTransform = CGAffineTransformMakeRotation(angle);
CGAffineTransform customRotation = CGAffineTransformConcat(CGAffineTransformConcat(CGAffineTransformInvert(translateTransform), rotationTransform), translateTransform);
rotatedPoint = CGPointApplyAffineTransform(initialPoint, customRotation);
Sử dụng 2D rotation matrix. Nếu bạn muốn xoay một điểm ngược về nguồn gốc của một góc angle
, sau đó bạn sẽ làm điều này:
CGPoint RotatePointAboutOrigin(CGPoint point, float angle)
{
float s = sinf(angle);
float c = cosf(angle);
return CGPointMake(c * point.x - s * point.y, s * point.x + c * point.y);
}
Nếu bạn muốn xoay quanh một điểm khác so với xuất xứ, bạn sẽ phải trừ đi đầu tiên trung tâm quay vòng từ điểm của bạn, xoay nó bằng cách sử dụng ở trên, và sau đó thêm trở lại trong tâm quay (điều này được gọi là cách chia động từ trong lý thuyết ma trận).
Adam, Bạn đã cứu mạng tôi với lời giải thích về cách chia động từ. Cảm ơn bạn :) –
Sử dụng CGAffineTransform.
Bạn cũng có thể để Core Animation làm điều đó cho bạn. Hãy nhìn vào tài liệu của Apple trên lớp hình học và biến đổi trong Core Animation Programming Guide
Tất cả bạn phải làm là thiết lập các anchorPoint của lớp và sau đó bạn có thể áp dụng các thay đổi với một cái gì đó như thế này:
CABasicAnimation *rotationAnimation;
rotationAnimation = [CABasicAnimation
animationWithKeyPath:@"transform.rotation.z"];
[rotationAnimation setFromValue:DegreesToNumber(0)];
[rotationAnimation setToValue:DegreesToNumber(360)];
DegreesToNumber chuyển đổi độ thành radian và trả về một biểu diễn NSNumber.
Tôi không chắc chắn những gì bạn đang cố gắng làm chính xác, nhưng thường Hoạt ảnh cốt lõi là lựa chọn tuyệt vời cho việc hiển thị trực quan.
Sử dụng Vladimir’s answer, dưới đây là Swift 3 câu trả lời:
let initialPoint = CGPoint(x: 100, y: 100) // the point you want to rotate
let translateTransform = CGAffineTransform(translationX: initialPoint.x, y: initialPoint.y)
let rotationTransform = CGAffineTransform(rotationAngle: angle)
let customRotation = (rotationTransform.concatenating(translateTransform.inverted())).concatenating(translateTransform)
rotatedPoint = initialPoint.applying(customRotation)
- 1. CSS - Cách tốt nhất để tạo lưới Sudoku 9x9 là gì?
- 2. Cách tốt nhất để hiển thị ASCII trong lưới bằng các bảng bằng Java là gì?
- 3. Cách nhanh nhất để xoay các bit trong khối 8x8 trên bit là gì?
- 4. IDE tốt nhất để phát triển trên BlackBerry là gì?
- 5. Cách tốt nhất để xây dựng lưới 10x10 của UIButtons?
- 6. Cách tốt nhất để lớp trong Canvas HTML5 là gì?
- 7. Cách tốt nhất để băm url trong ruby là gì?
- 8. Cách tốt nhất để học CUDA là gì?
- 9. Cách tốt nhất để học Django 1.5 là gì?
- 10. Cách tốt nhất để tìm kiếm GitHub là gì?
- 11. Cách tốt nhất để phân tích chuỗi là gì?
- 12. Cách tốt nhất để bao gồm Javascript là gì?
- 13. Cách tốt nhất để xoay các tệp nhật ký Apache
- 14. Nội suy nào là tốt nhất cho xoay hình ảnh?
- 15. Cách tốt nhất để bố trí lớp C# là gì?
- 16. Cách tốt nhất để phát hiện màu trắng là gì?
- 17. Cách tốt nhất để kiểm tra RedirectToAction là gì?
- 18. Cách tốt nhất để gỡ lỗi OpenGL là gì?
- 19. Cách tiếp cận tốt nhất để đăng nhập là gì?
- 20. Cách tốt nhất để bắt đầu với NHibernate là gì?
- 21. Cách tốt nhất để tránh maven-jar là gì?
- 22. Cách tốt nhất để học WCF là gì?
- 23. Cách tốt nhất để bắt đầu với OSGI là gì?
- 24. cách tốt nhất để có kích thước tệp là gì?
- 25. Cách tốt nhất để tạo tra cứu whois là gì?
- 26. Cách tốt nhất để thực hiện "hẹn giờ" là gì?
- 27. Cách tốt nhất để khóa nhiều std :: mutex'es là gì?
- 28. Cách tốt nhất để học Erlang là gì?
- 29. Cách tốt nhất để sao chép danh sách là gì?
- 30. Cách tốt nhất để dọn sạch thư mục là gì?
Bạn có nghĩa là bạn muốn xoay một cái gì đó xung quanh một điểm? – Jasarien
Yea hiển nhiên từ một điểm xuất phát. – Frank