在管網空間資訊系統的管線碰撞分析模組開發過程中,遇到計算異面直線的公垂線的問題。通過查詢資料,得到了計算異面直線的公垂線距離的公式,但為了判斷垂足是否在直線的確定的一段線段上,則必須計算出垂足的座標。以下根據資料,演算了公垂線的垂足的座標通用計算公式。
題目:已知兩條異面直線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 掌握垂線的性質,並會利用所學知識進行簡單的推理 難點 一 情境匯入 在獲得分數最高的中你知道運動員的身體和水面之間的關係嗎?這節課我們將要學習有關...