سؤال

أنا أحاول التحقق من موقع نقطة(px, py) على 2D الرسم البياني فيما يتعلق شريحة الخط (lx1, ly1) (lx2, ly2) ، وذلك باستخدام المنطق شمال جنوب شرق غرب الاتجاهات.المنطق يجب تنفيذها هو رسم عمودي على خط مستقيم من نقطة.

إذا عمودي على الخط الذي يعني الجنوب.

إذا كانت النقطة على الجانب الأيمن يعني الشرق.

إذا كانت النقطة على الجانب الأيسر يعني الغرب.

إذا عمودي بعيدا عن الخط في الاتجاه إلى الأمام يعني الشمال.

إذا عمودي بعيدا عن الخط في اتجاه الخلف يعني الجنوب.

مشكلتي هي أن هذا المنطق تبدو جيدة على الورق ، ولكن الحصول على حقا من الصعب أن تقرر ما إذا كان لها NW, NE, SW أو SE القضية.أي شخص يمكن أن توحي لي كيفية حساب هذا المنطق??أنا باستخدام C++, ولكن الخوارزمية في أي لغة سوف تكون عونا كبيرا.

أنا باستخدام نقطة نهاية الخط الجزء لحساب شمال جنوب شرق غرب العلاقة.

هتافات

هل كانت مفيدة؟

المحلول

  • delta_x = x2 - x1
  • delta_y = y2 - y1
  • distance = sqrt (delta_x^2 + delta_y^2)
  • tan (theta) = delta_y / delta_x
  • theta = arctan (delta_y / delta_x) ;; ولكن لا القسمة على صفر!
  • تتكاثر theta قبل 180/PI للحصول على درجة

على درجة عكس اتجاه عقارب الساعة من الجانب الإيجابي من x-axis.في نهاية المطاف سوف تحتاج إلى القيام به كمية صغيرة من الجبر إلى توجيه درجة بحيث 0 هو (بدلا من الحق) وتشغيل اتجاه عقارب الساعة.ولكن قبل ذلك:

المشكلة هي أن arctan (1 / -1) هو نفس arctan (-1 / 1). أولا-هاء., ستحصل على -PI/4 راديان أو -45 درجة, لكل اليسرى العليا (يحتاج 180 درجة الأوفست) و السفلي الأيمن (ok كما هو).سيكون لديك لإجراء اختبارات على علامة delta_y مقابل delta_x لمعرفة ما إذا كان نتيجة arctan يحتاج إلى تعديل.

قبل أنت رمز الحل الخاص بك ، تأكد من رمز الاختبارات وكذلك للتأكد من وظائف تتصل إنتاج القيم المتوقعة.

نصائح أخرى

وأنا أتعاطف مع ndim. حساب الاتجاه من نقطة واحدة إلى أخرى أمرا سهلا. أنا لا أفهم هذا السياق سوف تتطلب منك تريد الاتجاه من خط. هذا هو تطبيق الخرائط؟ هل هناك طريق، وحوالي منتصف الطريق على طول جزء من الطريق كنت قد حصلت على بعض نقطة جانبية؟

دلالات ما "الشمال" أو "NE" أو "الشرق" من شريحة الخط يعني في الواقع هو واضح.

الاتجاهات مثل "الشمال" أو "الشرق" أو "NE" عادة ما تستخدم لوصف موقع نقطة واحدة بالنسبة إلى آخر (القاعدة) نقطة.ما هي نقطة على شريحة خط تستخدمه كما أن قاعدة النقطة ؟

تحرير: الآن بعد أن كنت أقول كنت ترغب في استخدام نقطة النهاية (x2,y2) كمركز نقطة البوصلة ، (x,y) وسوف يكون موجودا بالنسبة إلى البوصلة من خلال دراسة دلتا ناقلات (x-x2,y-y2).

من السهل أن سبب عن الأسلوب يستخدم atan2() على دلتا ناقلات ، وتعتبر زاوية عاد قبل atan2().

ومع ذلك ، فإنه قد يكون فكرة جيدة فقط مقارنة الحجج atan2() بعضها البعض وتحديد الناتجة زاوية يتراوح من ذلك.هذا الأساس يتجنب الاتصال atan2() في وقت التشغيل في تكلفة أنت بحاجة إلى القيام ببعض العمليات الحسابية عند (أو قبل) وقت الترجمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top