سؤال

لدي خط موجود في 3d التي هي بين اثنين من نقاط معروفة:{X1, Y1, Z1} و {X2, Y2, Z2}.

أعرف أيضا أنني مسافة معينة عن واحدة من النقاط:D

كيف يمكنني تحديد إحداثيات النقطة التي أنا بعد انتقاله د من {X1, Y1, Z1}?

شكرا

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

المحلول

وعلى افتراض انك تريد نقل المسافة D من نقطة إلى نقطة 1 2:

P1 = [ X1, Y1, Z1 ]
P2 = [ X2, Y2, Z2 ]

ويمكن وصف ناقل خط على النحو التالي:

V = P2 - P1 = [ Xv = X2 - X1, Yv = Y2 - Y1, Zv = Z2 - Z1 ]

ويمكن تحديد طول الخط وعلى النحو التالي:

VL = SQRT(Xv^2 + Yv^2 + Zv^2)     // ^2 = squared

وversor خط ويعرف أيضا باسم متجه الوحدة يمكن تحديدها على النحو التالي:

v = V / VL = [Xv / VL, Yv / VL, Zv / VL]

ويمكن تحديد PD نقطة الهدف على النحو التالي:

Pd = P1 + D * v // Starting from P1 advance D times v

تجدر الإشارة إلى أن P1 والخامس وناقلات وD هو العددية

نصائح أخرى

أولا، تحديد طول القطعة المستقيمة:

d=sqrt((X1-X2)^2+(Y1-Y2)^2+(Z1-Z2)^2))

وأنت تنقل D من P1 = (X1، Y1، Z1) نحو P2 = (X2، Y2، Z2). هذا يضعك في النقطة (X3، Y3، Z3):

{XYZ}3={XYZ}1+(D/d)*({XYZ}2-{XYZ}1})

وأين قمت بتوسيع هذا إلى 3 المعادلات، واحدة لكل من X، Y، Z و.

وهذا يعمل لأنك D / د من الطريق بين P1 و P2. تحقق: قل D = د. ثم يجب أن تكون في تمام P2.

وخذ ناقلات بين النقطتين

<X2-X1, Y2-Y1, Z2-Z1>

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

         <X2-X1, Y2-Y1, Z2-Z1>
---------------------------------------
sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)

وثم تتضاعف بحلول D وإضافة إلى النقطة الأصلية الخاصة بك للحصول على نقطة جديدة.

                            <X2-X1, Y2-Y1, Z2-Z1>
(X1, Y1, Z1) + D * ---------------------------------------
                   sqrt((X2-X1)^2 + (Y2-Y1)^2 + (Z2-Z1)^2)

هذا هو مزيج خطي المشكلة:

dist = المسافة(p1, p2)

المسافة D يعطى

f = D / dist (كسور إحداثيات النقطة D في LineSeg (p1, p2)

pD = LinearCombo (1-f, p1, f, p2) (إحداثيات نقطة بعد د من p1)

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