2009-04-24 2 views
51

Я хочу знать, как выработать новые координаты для точки при повороте на угол относительно другой точки.Поверните точку на другую точку в 2D

У меня есть стрелка блока и вы хотите повернуть его на угол тета относительно точки посередине основания стрелки.

Это требуется, чтобы разрешить рисовать многоугольник между двумя экранными элементами управления. Я не могу использовать и поворачивать изображение.

Из того, что я рассмотрел до сих пор, что еще более усложняет вопрос о том, что происхождение экрана находится в верхнем левом углу.

ответ

126

Если повернуть точку (px, py) вокруг точки (ox, oy) по углу theta вы получите:

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

У вас есть 3D-версия в памяти? :) –

+1

Может ли тэта быть в радиантах и ​​градусах? Простите, если dumb -Q- .. –

+7

Это зависит от того, какую библиотеку вы используете для функций триггера. В C вам нужно пройти в радианах. –

8

Если вы используете GDI +, чтобы сделать это, вы можете использовать Transform методы Graphics объекта:

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

Затем нарисуйте фактический материал.

+3

Разве это не может быть перевод по-точке происхождения? – Spook

2

Если у вас есть System.Windows.Media имен доступных, то вы можете использовать встроенный в преобразованиях:

using System.Windows.Media; 

    var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y}; 
    var transformedPoint = transform.Transform(point); 
Смежные вопросы