خوارزمية حساب الميل بين الخط نسبيًا إلى إحداثيات المركز

StackOverflow https://stackoverflow.com/questions/4085687

  •  28-09-2019
  •  | 
  •  

سؤال

الرجاء المساعدة في خوارزمية حساب المنحدر حتى يكون لدينا نظام إحداثيات الديكارتية. x الحق في y الجزء العلوي. هناك خط يمر عبر مركز الإحداثيات. اللازمة لتحديد الزاوية نسبيا إلى ثور المحور.

إذن هذا ما أفعله

  1. تم نقل بعض الوظائف إلى الأصل (الخط العلوي) ونهاية الخط
  2. تحديد DX ، دى
  3. يطلق Hildren معلمتين في ATAN2 (DY ، DX)
  4. يعيد النتيجة إلى الراديان.

ولكن! أنا 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 .
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top