2009-04-24 65 views
51

Tôi muốn biết cách tính các tọa độ mới cho một điểm khi được xoay theo một góc tương ứng với một điểm khác.Xoay một điểm bằng một điểm khác trong 2D

Tôi có một mũi tên khối và muốn xoay nó bằng một góc theta tương ứng với một điểm ở giữa phần gốc của mũi tên.

Điều này là bắt buộc để cho phép tôi vẽ đa giác giữa 2 điều khiển trên màn hình. Tôi không thể sử dụng và xoay hình ảnh.

Từ những gì tôi đã xem xét cho đến nay những gì phức tạp hơn vấn đề là nguồn gốc của một màn hình là ở góc trên bên trái.

Trả lời

126

Nếu bạn xoay điểm (px, py) quanh điểm (ox, oy) bởi góc theta bạn sẽ nhận được:

 
p'x = cos(theta) * (px-ox) - sin(theta) * (py-oy) + ox 
p'y = sin(theta) * (px-ox) + cos(theta) * (py-oy) + oy 
+2

Bạn cũng có phiên bản 3D trong bộ nhớ? :) –

+1

Theta có bị rạng rỡ và độ không? Hãy tha thứ nếu câm -Q- .. –

+7

Nó phụ thuộc vào thư viện bạn đang sử dụng cho các chức năng trig. Trong C, bạn cần vượt qua radian. –

8

Nếu bạn đang sử dụng GDI + để làm điều đó, bạn có thể sử dụng Transform method của đối tượng Graphics:

graphics.TranslateTransform(point of origin); 
graphics.RotateTransform(rotation angle); 

Sau đó, vẽ những thứ thực tế.

+3

Đó không phải là bản dịch theo điểm gốc? – Spook

2

Nếu bạn có System.Windows.Media namespace có sẵn, sau đó bạn có thể sử dụng được xây dựng trong biến đổi:

using System.Windows.Media; 

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y}; 
    var transformedPoint = transform.Transform(point); 
Các vấn đề liên quan