已知有平面上三個點(abc)座標,直線上兩個點(de)座標,求平面abc與直線de的交點座標。
解:
/**
* 平面與直線的交點
* * @param planta
* @param plantb
* @param plantc
* @param lined
* @param linee
* @return
*/public static double getcrosspointofplaneandline3d(double planta, double plantb, double plantc,
double lined, double linee)
// 三稜錐abcd的體積的3倍為向量ab×ac·ad
double arrowad = arrow(planta, lined);
double volumed = dotmultiply3d(plantside, arrowad);
// 此步之前已證明底面積不為0,若體積為0,則d點在平面abc上
if (volumed == 0)
// 三稜錐abce的體積的3倍為向量ab×ac·ae
double arrowae = arrow(planta, linee);
double volumee = dotmultiply3d(plantside, arrowae);
// 此步之前已證明底面積不為0,若體積為0,則e點在平面abc上
if (volumee == 0)
// abcd與abce體積相等,說明d與e到平面的距離相等,且在同一側,即線段與平面平行
if (volumed == volumee)
// 若直線de與平面abc不平行,則必能在直線de上找到一點f,使三稜錐abcf的體積為0,點f即直線de與平面abc的交點
double ans = new double[3];
for (int i = 0; i < ans.length; ++i)
return ans;
}
axis函式和matlab的axis函式類似,但是這個axis是對數字進行縮放,不會作用於顯示器。與點積、叉積不同,估計很多人不知道axis是怎樣實現的。這裡附上axis函式:
/**
* 縮放座標(不支援整數操作,因為整數操作比例計算時會失去小數部分,使比例不正確)
* * @param srcmin 原域最小值
* @param srcmax 原域最大值
* @param dstmin 新域最小值
* @param dstmax 新域最大值
* @param x 座標陣列
* @return 新座標
*/public static double axis(double srcmin, double srcmax, double dstmin, double dstmax, double... x)
// 假想的攝像機座標範圍
double mathrange = srcmax - srcmin;
// 顯示器的尺寸範圍
double displayrange = dstmax - dstmin;
// 兩個範圍相除就是兩個座標系的縮放比例
double slope = displayrange / mathrange;
double ret = new double[x.length];
for (int i = 0; i < x.length; ++i)
return ret;
}
axis是可以反向對映的,也就是把源座標範圍或目標座標範圍的最大值和最小值換位,就可以變成源座標增加,目標座標減小。axis也支援把乙個有長度的範圍對映到0長度的範圍,就是把目標座標的最大最小設為相等。這個縮放函式與matlab圖表座標範圍設定不同,matlab有x和y兩個縮放比例,這個axis只有乙個縮放比例,如果要像matlab的axis一樣縮放,需要分別為x軸和y軸呼叫axis,並輸入各自的對映範圍。matlab的axis的顯示器座標是自動的,此處的這個axis用於數字的換算,換算的範圍和比例是未知的,所以才會有乙個目標範圍。 空間直線與平面的交點
如果直線不與平面平行,將存在交點。如下圖所示,已知直線l過點m m1,m2,m3 且方向向量為vl v1,v2,v3 平面p過點n n1,n2,n3 且法線方向向量為vp vp1,vp2,vp3 求得直線與平面的交點o的座標 x,y,z 將直線方程寫成引數方程形式,即有 x m1 v1 t y m2...
空間直線與平面的交點
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!如果直線不與平面平行,將存在交點。如下圖所示,已知直線l過點m m1,m2,m3 且方向向量為vl v1,v2,v3 平面p過點n n1,n2,n3 且法線方向向量為vp vp1,vp2,vp3 求得直線與平面的交點o的座標 x,y,z 將直線方程...
計算直線交點與夾角方法
基於matlab求解初等幾何問題 lyqmath 在工程應用 科學計算等領域,計算兩條直線的交點是乙個較為基礎的問題。一般的應該考慮到直線方程的寫法和求解交點的方式。這裡給出乙個具體的處理方式,其基本思想是 首先基於給定的節點定義出直線一般方程,然後求解方程組得到直線方程引數,最後根據得到的兩條直線...