تحديد إحداثيات نقطة في 3D
-
08-07-2019 - |
سؤال
لدي خط موجود في 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)