فصل اختبار المحور ، واكتشاف ما إذا كان المستطيل المتداول يتداخل مع مستطيل مسطح آخر

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

سؤال

قرأت عن مستطيلات التقاطع على:

خوارزمية للكشف عن تقاطع اثنين من المستطيلات؟

لكن لدي مشكلة في تنفيذها.

إذا كان R1 (A ، B ، C ، D) هو مستطيل بلدي الدوران و R2 (A '، B' ، C '، D') المستطيل الآخر بدون دوران.

الصيغة المستخرجة من الرابط أعلاه هي:

  edge = v(n) - v(n-1)

يمكنك الحصول على عمودي على هذا عن طريق تدويره بمقدار 90 درجة. في 2D هذا سهل على النحو التالي:

  rotated.x = -unrotated.y
  rotated.y =  unrotated.x

  // rotated: your rotated edge
  // v(n-1) any point from the edge.
  // testpoint: the point you want to find out which side it's on.

  side = sign (rotated.x * (testpoint.x - v(n-1).x) + 
               rotated.y * (testpoint.y - v(n-1).y);

ستكون حوافي المدورة من R1 مع

AB (XB-XA ، yb-ya) لذلك X دوران x هو xb-xa؟ BC (XC-XB ، YC-Y1) CD ... AD ...

سيكون TestPoint A "، B" ، C "، D" من R2 ، لذلك يجب أن أتحقق من علامة النتيجة من جميع نقاط R2 مقابل الحواف الأربعة من R1. هذا 16 مقارنات إذا تقاطع. كيف أعرف إذا وجدت حافة منفصلة؟

شكرًا

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

المحلول

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

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