الحصول على مسافة نقطة ما بين خطين

I have 4 points, three of the points make two lines like a V or a < or a >, you get the idea, now I got a point that's in that cone (the V) and I can get the dist from the top to the bottom left, and bottom right, but not where the bottom pos is.

Maybe this will help. https://dl.dropbox.com/u/28109593/examplevec.png

ولدي رمز لمتابعة هذه المشكلة:

public float GetDist(Vector3f one, Vector3f two, Vector3f three, Vector3f p){


          Vector3f one_to_point = new Vector3f(0,0,0);
          Vector3f.sub(p,one,one_to_point);            //Storing vector A->P



          Vector3f one_to_two = new Vector3f(0,0,0);
          Vector3f.sub(two, one, one_to_two);            //Storing vector A->B

          Vector3f one_to_three = new Vector3f(0,0,0);
          Vector3f.sub(three, one, one_to_three);            //Storing vector A->C

          float q1 =  Vector3f.dot(one_to_point,  one_to_two)/one_to_two.lengthSquared();           //The normalized "distance" from a to b
          float q2 =  Vector3f.dot(one_to_point,  one_to_three)/one_to_three.lengthSquared();           //The normalized "distance" from a to c

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

0
انها سوف تكون في نهاية B و C، ولكن ذلك سوف تختلف في طول انها من B إلى C خط.
وأضاف المؤلف CyanPrime, مصدر
إلى أي مدى تكون النقطة الخضراء على طول الخط؟
وأضاف المؤلف Ignacio Vazquez-Abrams, مصدر

2 إجابة

لديك 4 نقاط في المستوى: A و B و C و D (حيث D هو ما تقوم بتمييزه كمخطط في الرسم التخطيطي الخاص بك). يمكن رسم خط مستقيم فريد بين أي نقطتين مختلفتين ، لذلك ابحث عن الخط المستقيم الذي يربط A و D ويحصل على المعادلة في الشكل

    y = m_1 * x + c_1

افعل نفس الشيء بالنسبة للنقاط B و C للحصول عليها

    y = m_2 * x + c_2

الآن أنت تعرف السطور 2 ، يمكنك حل هذا الزوج من المعادلات المتزامنة للحصول على النقطة (س ، ص) التي تقع على الدائرة الخضراء على الرسم التخطيطي الخاص بك - سأدعو هذا E. أعطى E ، وحساب طول ناقلات BE و يقسم على طول المتجه BC. هذه القيمة هي قيمة X التي تبحث عنها في سؤالك.

If you do not know how to find the equation for a line that goes through 2 points look at this link for details http://www.ugrad.math.ubc.ca/coursedoc/math100/notes/zoo/eqline.html

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

0
وأضاف
JonBWalsh c_1 و c_2 لن يكونا بشكل عام. ولرؤية هذا ، ضع في اعتبارك المشكلة مع ترجمة جميع النقاط بحيث أن النقطة B تتطابق مع الأصل.
وأضاف المؤلف mathematician1975, مصدر
CyanPrime راجع الرابط في الإجابة المعدلة. هذا يوفر تفاصيل حول كيفية الحصول على المعادلة الخط من النقاط 2.
وأضاف المؤلف mathematician1975, مصدر
كيف يمكنني الحصول على c_ و m_؟
وأضاف المؤلف CyanPrime, مصدر
أعتقد أن هذا صحيح ، وهو أنيق جدًا عند تبسيطه. في التعليمات البرمجية أعتقد أنه يمكنك فقط القيام بشيء مثل x = A.x + ((A.x - Pos.x)/(A.y - Pos.y)) * (A.y-B.y). في الأساس تجد دلتا x على كل وحدة من y ثم متعددة عن طريق عدد وحدات y التي تريد الخروج إليها.
وأضاف المؤلف JonBWalsh, مصدر

لقد مرّ بعض الوقت منذ أن قمت بمهمة الجبر ، لكن دعني أرى ما إذا كنت قد حصلت على هذا الحق. أنت تبحث عن النقطة الخضراء ، حيث يتقاطع خط من A إلى Pos مع خط من B إلى C.

أعتقد أنه إذا عرفت نسبة الزاوية التي تشكلها BA-Pos للزاوية التي تشكلها BAC ، فإن هذه النسبة ستكون هي نفس نسبة المسافة من B إلى Green إلى المسافة من B إلى C. من B ، اتجاه الأخضر هو نفس اتجاه C ، لذلك فإن المتجه الذي يمثل موقع Green

VectorGreen = VectorB + (x1/x2) (VectorC - VectorB)//المتجه إلى B بالإضافة إلى جزء من المتجه من B إلى C

x1 = arccos (Normalize (VectorP - VectorA) * Normalize (VectorB - VectorA))//Angle between A to B and A to Pos

x2 = arccos (Normalize (VectorB - VectorA) * Normalize (VectorC - VectorA))//Angle between A to B and A to C

0
وأضاف
كيف يمكنك arccos ناقل كامل في رقم واحد؟ أو هي ناقلات x1 و x2 كذلك؟
وأضاف المؤلف CyanPrime, مصدر