c# - نقاط - حساب احداثيات نقطة بمعلومية نقطتين




كيف يمكنني تحديد نقطة تقاطع خطين في جدي+؟ (2)

إذا قمت بتدوير الإطار المرجعي الخاص بك لتتماشى مع مقطع السطر الأول (بحيث يكون الأصل الآن بداية السطر الأول، ويمتد المتجه للسطر الأول على طول المحور السيني) يصبح السؤال، أين السطر الثاني ضرب المحور السيني في نظام الإحداثيات الجديد. هذا سؤال أسهل بكثير للإجابة. إذا كان السطر الأول يسمى A ويعرفه AO باعتباره أصل الخط و "أف" هو متجه السطر بحيث AO + AV هو نقطة نهاية السطر. ويمكن تعريف الإطار المرجعي بالمصفوفة:

    | A.V.X   A.V.Y   A.O.X |
M = | A.V.Y  -A.V.X   A.O.Y |
    |   0       0       1   |

وفي إحداثيات متجانسة توفر هذه المصفوفة أساسا للإطار المرجعي الذي يرسم الخط A إلى 0 إلى 1 على المحور X. يمكننا الآن تعريف الخط المحول B النحو التالي:

C.O = M*(B.O)
C.V = M*(B.O + B.V) - C.O

حيث المشغل * معرفة بشكل صحيح للإحداثيات متجانسة (إسقاط من 3 مساحة على 2 الفضاء في هذه الحالة). الآن كل ما تبقى هو للتحقق ونرى حيث يضرب C المحور X الذي هو نفس حل الجانب Y من المعادلة حدودي من C ل t :

C.O.Y + t * C.V.Y = 0
     -C.O.Y
t = --------
      C.V.Y

إذا كان t في المدى من 0 إلى 1، فإن C يضرب المحور X داخل مقطع السطر. ويعطى المكان الذي تهبطه على المحور س من جانب X من المعادلة البارامترية ل C :

x = C.O.X + t * C.V.X

إذا كانت x في النطاق من 0 إلى 1، يكون التقاطع على جزء السطر A يمكننا بعد ذلك العثور على نقطة في نظام الإحداثيات الأصلي مع:

p = A.O + A.V * x

سيكون لديك بالطبع للتحقق أولا لمعرفة ما إذا كان أي جزء خط طول صفر. أيضا إذا CVY = 0 لديك شرائح خط موازية. إذا كان CVX أيضا صفرا لديك شرائح خط كولينير.

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

لذا سؤالي هو، هل يمكن لأي شخص أن يقترح طريقة للقيام بذلك؟ ربما مع تقنية مختلفة (ربما غراففيز) أو خوارزمية؟







gdi+