2009-04-24 14 views
51

Chcę wiedzieć, jak obliczyć nowe współrzędne dla punktu, gdy obrócony o kąt względem innego punktu.Obracanie punktu o inny punkt w 2D

Mam strzałkę blokującą i chcę ją obrócić o kąt teta względem punktu w środku podstawy strzałki.

Jest to wymagane, aby umożliwić mi narysowanie wielokąta między 2 elementami sterującymi na ekranie. Nie mogę użyć i obrócić obrazu.

Z tego co dotychczas rozważałem, co dodatkowo komplikuje sprawę, jest to, że pochodzenie ekranu znajduje się w lewym górnym rogu.

Odpowiedz

126

Jeśli obracać wokół punktu (px, py) punktu (ox, oy) o kąt theta dostaniesz:

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

Czy masz również wersję 3D w pamięci? :) –

+1

Czy theta byłby w promieniach i stopniach? Wybacz, jeśli głupi -Q- .. –

+7

To zależy od biblioteki, której używasz do funkcji trygonometrycznych. W C musisz przekazać radiany. –

8

Jeśli używasz GDI +, aby to zrobić, można użyć Transform metod obiektu Graphics:

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

Następnie wyciągnąć rzeczywiste rzeczy.

+3

Czy nie powinno to być tłumaczenie według punktu pochodzenia? – Spook

2

Jeśli masz System.Windows.Media nazw dostępny, można użyć wbudowanego w przemianach:

using System.Windows.Media; 

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y}; 
    var transformedPoint = transform.Transform(point);