خوارزمية حساب الميل بين الخط نسبيًا إلى إحداثيات المركز
سؤال
الرجاء المساعدة في خوارزمية حساب المنحدر حتى يكون لدينا نظام إحداثيات الديكارتية. x الحق في y الجزء العلوي. هناك خط يمر عبر مركز الإحداثيات. اللازمة لتحديد الزاوية نسبيا إلى ثور المحور.
إذن هذا ما أفعله
- تم نقل بعض الوظائف إلى الأصل (الخط العلوي) ونهاية الخط
- تحديد DX ، دى
- يطلق Hildren معلمتين في ATAN2 (DY ، DX)
- يعيد النتيجة إلى الراديان.
ولكن! أنا atan2 يعمل فقط في غضون 180 درجة. بعد 180 يذهب في اتجاه آخر.
إذن السؤال: ما هي الخوارزمية الصحيحة لإيجاد الزاوية؟ هل أحتاج إلى أخذ قيم DY و DX بحجم؟ كيفية جعل arctangent محسوبة لجميع 360 وأكثر؟ سأكون سعيدًا لسماع خوارزميات محددة ، أو أجزاء من تعليقات التعليمات البرمجية. شكرا!
static inline CGFloat angleBetweenLinesInRadians2 (CGPoint line1Start, CGPoint line1End)
{
CGFloat dx = 0, dy = 0;
dx = line1End.x - line1Start.x; / / whether to do fabs (line1End.x - line1Start.x);
dy = line1End.y - line1Start.y;
CGFloat rads = atan2 (dy, dx); / / whether to do fabs (rads)
return rads;
}
المحلول
من المفترض أن يعيد ATAN2 () قيمة في الفاصل الزمني [-PI ، PI] (أي [-180 ، 180]) ، ويعمل مع علامات X و Y لمعرفة الربع. ((C ++ المرجع)
من الناحية الفنية ، لديك 360 درجة.
نصائح أخرى
صيغة لحساب زاوية من 0 إلى 360 درجة:
f (x ، y) = 180-90*(1+sign (x))*(1-sign (y^2))-45*(2+sign (x))*sign (y)
-180/pi()*sign(x*y)*atan((abs(x)-abs(y))/(abs(x)+abs(y)))
x=x2-x1 and y=y2-y1 .