異面直線公垂線的垂足座標計算公式推導

2022-02-22 11:08:20 字數 2399 閱讀 2761

在管網空間資訊系統的管線碰撞分析模組開發過程中,遇到計算異面直線的公垂線的問題。通過查詢資料,得到了計算異面直線的公垂線距離的公式,但為了判斷垂足是否在直線的確定的一段線段上,則必須計算出垂足的座標。以下根據資料,演算了公垂線的垂足的座標通用計算公式。

題目:已知兩條異面直線ab、cd上兩點座標分別為a()、b()、c()、d()。推導直線ab與cd之間的公垂線在各自直線上的垂足座標計算公式。

解題推導:

定義直線ab上的垂足m(xm,ym,zm), 直線cd上的垂足n(xn,yn,zn)。

定義 am = t1*ab => (xm-xa,y-ya,z-za)=t1*(xb-xa,yb-ya,zb-za)

則 m座標定義為

m( t1(xb-xa)+xa , t1(yb-ya)+ya , t1(zb-za)+za );

同理 n座標定義為

n( t2(xd-xc)+xc , t2(yd-yc)+yc , t2(zd-zc)+zc );

所以 向量mn定義為 mn(t2(xd-xc)+xc-t1(xb-xa)-xa, t2(yd-yc)+yc-t1(yb-ya)-ya,

t2(zd-zc)+zc-t1(zb-za)-za);

因為 mn垂直於ab,mn垂直於cd,根據空間向量點積特性,

(xb-xa)[t2(xd-xc)+xc-t1(xb-xa)-xa]+(yb-ya)[t2(yd-yc)+yc-t1(yb-ya)-ya]+(zb-za)[t2(zd-zc)+zc-t1(zb-za)-za]=0;

(xd-xc)[t2(xd-xc)+xc-t1(xb-xa)-xa]+(yd-yc)[t2(yd-yc)+yc-t1(yb-ya)-ya]+(zd-zc)[t2(zd-zc)+zc-t1(zb-za)-za]=0;

分別推導得到:

式1:t2[(xb-xa)*(xd-xc)+(yb-ya)*(yd-yc)+(zb-za)*(zd-zc)]-t1[(xb-xa)* (xb-xa)+(yb-ya)*(yb-ya)+(zb-za)*(zb-za)]+[(xb-xa)*(xc-xa)+(yb-ya)*(yc-ya)+(zb-za)*(zc-za)]=0

式2:t2[(xd-xc)*(xd-xc)+(yd-yc)*(yd-yc)+(zd-zc)*(zd-zc)]-t1[(xb-xa)*(xd-xc)+(yb-ya)*(yd-yc)+(zb-za)*(zd-zc)]+[(xd-xc)*(xc-xa)+(yd-yd)*(yc-ya)+(zd-zc)*(zc-za)]=0

令:f1(a,b)=[(xb-xa)*(xb-xa)+(yb-ya)*(yb-ya)+(zb-za)*(zb-za)]

f1(c,d)= [(xd-xc)*(xd-xc)+(yd-yc)*(yd-yc)+(zd-zc)*(zd-zc)]

f2()=[(xb-xa)*(xd-xc)+(yb-ya)*(yd-yc)+(zb-za)*(zd-zc)]

f3(a,b)=[(xb-xa)*(xc-xa)+(yb-ya)*(yc-ya)+(zb-za)*(zc-za)]

f3(c,d)=[(xd-xc)*(xc-xa)+(yd-yc)*(yc-ya)+(zd-zc)*(zc-za)]

則:式1=>式3:t2*f2()-t1*f1(a,b)+f3(a,b)=0;

式2=> 式4:t2*f1(c,d)-t1*f2()+f3(c,d)=0;

即:t1=[f3(a,b)*f1(c,d)-f3(c,d)*f2()]/[f1(a,b)*f1(c,d)-f2()*f2()]

t2=[f3(c,d)*f1(a,b)-f2()*f3(a,b)]/[f2()*f2()-f1(a,b)*f1(c,d)]

由此得到兩個垂足點的座標:

m(xm,ym,zm),

xm=t1*(xb-xa)+xa=(xb-xa)*[f3(a,b)*f1(c,d)-f3(c,d)*f2()]/[f1(a,b)*f1(c,d)-f2()*f2()]+xa;

ym=t1*(yb-ya)+ya=(yb-ya)*[f3(a,b)*f1(c,d)-f3(c,d)*f2()]/[f1(a,b)*f1(c,d)-f2()*f2()]+ya;

zm=t1*(zb-za)+za=(zb-za)*[f3(a,b)*f1(c,d)-f3(c,d)*f2()]/[f1(a,b)*f1(c,d)-f2()*f2()]+za;

n(xn,yn,zn),

xn=t2*(xd-xc)+xc=(xd-xc)*[f3(c,d)*f1(a,b)-f3(a,b)*f2()]/[f2()*f2()-f1(a,b)*f1(c,d)]+xc;

yn=t2*(yd-yc)+yc=(yd-yc)*[f3(c,d)*f1(a,b)-f3(a,b)*f2()]/[f2()*f2()-f1(a,b)*f1(c,d)]+yc;

zn=t2*(zd-zc)+zc=(zd-zc)*[f3(c,d)*f1(a,b)-f3(a,b)*f2()]/[f2()*f2()-f1(a,b)*f1(c,d)]+zc;

matlab練習程式(異面直線最近點和距離)

計算方法 1.兩條直線方向向量v1和v2的叉積,得到平行於兩條直線的平面v3。2.計算v3與第一條直線v1叉積,得到垂直於v3並且過線v1的平面v4,計算面v4與線v2的交點,得到線v2上的點t2。3.計算v3與第二條直線v2叉積,得到垂直於v3並且過線v2的平面v5,計算面v5與線v1的交點,得到...

Halcon中已知一條直線計算它的垂線與延長線

gen image const image,byte 1000,1000 生成一條直線 row1 100 col1 500 row2 500 col2 100 gen region line line,row1,col1,row2,col2 計算該直線的角度 line orientation row...

直線的端點畫垂線的lisp 七下微課5 1 2垂線

5 1.2 垂 線 1 理解垂線 垂線段的概念,會用三角尺或量角器過一點畫已知直線的垂線 重點 2 掌握點到直線的距離的概念,並會度量點到直線的距離 3 掌握垂線的性質,並會利用所學知識進行簡單的推理 難點 一 情境匯入 在獲得分數最高的中你知道運動員的身體和水面之間的關係嗎?這節課我們將要學習有關...