كيفية حساب ميل نقطة على بيانات التضاريس (مثل مصفوفة الارتفاع الرقمي)

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

سؤال

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

تنسيق بيانات التضاريس:
- مرتفعات [] []: صفيف ثنائي الأبعاد من العوامات (يمثل ارتفاعات في متر)
- الوحدة: مسافة الوحدة الأفقية بين (I ، J) - (I ، J+1) وبين (I ، J) - (I+1 ، J) في متر

السابق:

3|1311
2|2542 <-- 2D array of heights in meters
1|2231   (unit distance between two cell is, say, 1 meters)
0|1121   (so the highest point of the terrain (x = 1.5 meters, y = 2.5 meters)
  ----      is 5 meters high)
  0123

ما هي قيمة واتجاه المنحدر عند النقطة ، على سبيل المثال ، (x = 1.75 متر ، y = 2.25 متر)؟

ماذا ستكون خوارزمية الاستيفاء الخاصة بك؟

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

المحلول

بالطبع يمكنك بالطبع أن يتفاعل خطيًا على طول كل من محور X و Y ، أي أولاً يتفاعل قيمة Y لإحداثيات X أقل وأعلى من قيمة X الفعلية مرتين - مرة واحدة للتنسيق Y أقل من قيمة Y الفعلية و مرة واحدة لقيمة y أعلى من قيمة Y الفعلية. يمنحك هذا قيمتين y يمكنك أن تتنازل خطيًا بينها للحصول على الارتفاع.

من أجل العثور على المنحدر الذي تحتاجه للعثور على الطبيعة في تلك المرحلة. للعثور على الطبيعي ، يمكنك بعد ذلك القيام باستيفاء بنفس الطريقة. إعطاء إحدى البقع (التي تحددها أربع نقاط أ: (x1 ، y1) ، b: (x2 ، y1) ، c: (x2 ، y2) و d: (x1 ، y2) ، x1 <x2 ، y1 <y2 and تتضمن كل نقطة أيضًا الارتفاع) يمكنك القول أن الطبيعة في إحدى النقاط ، على سبيل المثال ، يتم تحديدها بواسطة المنتج المتقاطع للمتجهات AB و AD. الطبيعي في B هو BC X BA بنفس الطريقة.

يخطو خطيا الطبيعي بنفس الطريقة التي تتسع بها الارتفاع. لا أعرف بالتنسيق الذي تريده المنحدر ، ولكن إذا كنت تريد متجهًا يشير إلى اتجاه المنحدر ، فسيتم حسابه بعد ذلك بواسطة S = n - UP ، حيث يكون UP هو ببساطة متجه UP (في هذا المثال (0،0،1) بما أنك تستخدم Z كما يصل.

هناك طريقة أخرى تتمثل في تمييز المربعات في مثلثات ، ABD و BCD على سبيل المثال. عندئذ يكون الطبيعي للمثلث بأكمله هو AB X AD و BC X BD على التوالي. في هذه الحالة ، ألق نظرة على http://www.cc.gatech.edu/classes/ay2007/cs3451_spring/lininter.pdf على سبيل المثال حول كيفية استيفاء الارتفاع على المثلث. يمنحك هذا النهج مثلثات سلسة ، ولكن هناك اختلافات ملحوظة في المنحدر بين المثلثات المجاورة.

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