سؤال

لديّ نقطة (LAT/LON) وعنصر درجات (شمال حقيقي) تسافر إليها هذه النقطة. لدي العديد من المضلعات الثابتة (النقاط المحددة في LAT/LON) والتي قد تكون محدبة أو لا تكون محدبة.

سؤالي هو ، كيف يمكنني حساب أقرب نقطة تقاطع ، إن وجدت ، مع مضلع. لقد رأيت العديد من المنشورات المربكة حول تتبع الأشعة ، لكن يبدو أنها ترتبط برصيد ثلاثي الأبعاد عندما لا تكون الأشعة والمضلع على نفس المستوى ، كما يجب أن تكون المضلعات محدبة.

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

المحلول 4

يبدو أن الإجابة على هذه الصفحة هي الأكثر دقة.

السؤال 1. جودغورو

نصائح أخرى

يبدو أنك يجب أن تكون قادرًا على القيام بتقاطع خط ثنائي الأبعاد بسيط ...

ومع ذلك ، فقد عملت مع Lat/Long وأعلم أنها ليست صحيحة تمامًا في أي نظام إحداثيات ثنائية الأبعاد.

أود أن أبدأ بوظيفة "isPointInpolygon" العامة ، يمكنك العثور على مليون منها عن طريق Googling ، ثم اختبارها على بولي لمعرفة مدى نجاحها. إذا كانت دقيقة بما فيه الكفاية ، فقط استخدم ذلك. ولكن من الممكن أنه بسبب الطبيعة غير المربعة للإحداثيات Lat/Long ، قد تضطر إلى القيام ببعض التعديلات باستخدام الهندسة الكروية.

في 2D ، الحسابات بسيطة إلى حد ما ...

يمكنك دائمًا البدء بالتأكد من أن نقطة نهاية الشعاع ليست داخل المضلع (لأن هذه نقطة التقاطع في هذه الحالة).

إذا كانت نقطة النهاية خارج الخط ، فيمكنك القيام بتقاطع قطاع الأشعة/الخط مع كل من ميزات الحدود للمضلع ، واستخدام أقرب موقع تم العثور عليه. التي تتعامل مع ميزات محدبة/مقعرة ، إلخ.

حساب ما إذا كان الشعاع يتقاطع مع كل جزء خط في المضلع باستخدام هذه التقنية.

عامل التحجيم الناتج في إجابة (مقبولة) (التي اتصلت بها h) هو "إلى أي مدى على طول الشعاع هو التقاطع". أنت تبحث عن قيمة بين 0 و 1.

إذا كانت هناك نقاط تقاطع متعددة ، فلا بأس! إذا كنت تريد "الأول" ، فاستخدم تلك ذات القيمة الأصغر من h.

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