تدوير نقطة من نقطة أخرى في 2D
سؤال
أريد أن أعرف كيفية التواصل الجديد للنقطة عند التدوير بواسطة زاوية نسبة إلى نقطة أخرى.
لدي سهم كتلة وتريد تدويرها بواسطة زاوية ثيتا نسبة إلى نقطة في منتصف قاعدة السهم.
هذا مطلوب للسماح لي في رسم مضلع بين ضوابط 2 على الشاشة. لا أستطيع استخدام وتدوير صورة.
مما نظرت به حتى الآن ما الذي يعقد الأمر أكثر من ذلك هو أن أصل الشاشة في الزاوية اليسرى العليا.
المحلول
إذا قمت بتدوير النقطة (px, py)
حول النقطة (ox, oy)
بواسطة زاوية theta
ستحصل على:
P'x = cos (theta) * (px-ox) - sin (theta) * (py-oy) + ox p'y = sin (theta) * (px-ox) + cos (theta) * OY) + OY
نصائح أخرى
إذا كنت تستخدم GDI + للقيام بذلك، يمكنك استخدام Transform
طرق Graphics
هدف:
graphics.TranslateTransform(point of origin);
graphics.RotateTransform(rotation angle);
ثم ارسم الاشياء الفعلية.
إذا كان لديك System.Windows.Media
مساحة الاسم المتاحة، ثم يمكنك استخدام التحولات المدمجة:
using System.Windows.Media;
var transform = new RotateTransform() {Angle = angleInDegrees, CenterX = center.X, CenterY = center.Y};
var transformedPoint = transform.Transform(point);
لا تنتمي إلى StackOverflow