裡面大部分計算 與圓柱的交點類似,可以看下圓柱交點的推導過程:
點到直線的距離參考:
通過上面的公式求得k1,k2分別對於圓錐上的2點,但這個2點需要判斷是不是到圓錐軸的距離小於等於底面圓的半徑。
附上**:
/// /// 直線與圓錐的交點
///
///
///
///
///
///
///
public static int linetoconepoint(cone c, vector3 p1, vector3 p2, out vector3 rp1, out vector3 rp2)
else
}vector3 g = p1 - c.origin;
float vn = dot(v, c.normal);
float gn = dot(g, c.normal);
float gg = dot(g, g);
float vg = dot(v, g);
float rr = c.radius * c.radius;
float hh = c.height * c.height;
float a = 1 - vn * vn - rr * vn * vn / hh;
float b = 2 * vg - 2 * gn * vn + 2 * rr * vn / c.height - 2 * rr * gn * vn / hh;
float c = gg - gn * gn - rr + 2 * rr * gn/c.height - rr * gn * gn / hh;
float fourac = b * b - 4 * a * c;
if (fourac < 0)
float k1 = system.math.abs(-b + (float)system.math.sqrt(fourac)) / (2 * a);
float k2 = system.math.abs(-b - (float)system.math.sqrt(fourac)) / (2 * a);
vector3 pa = p1 + k1 * v;
vector3 pb = p1 + k2 * v;
int t = 0;
if (system.math.abs(pointtolinedistance(c.origin, c.origin + c.normal, pa)) > c.radius)
else
if (system.math.abs(pointtolinedistance(c.origin, c.origin + c.normal, pb)) > c.radius)
else
else
t++;
}return t;
}
3dmath 直線於圓柱的交點(無限長圓柱)
首先需要掌握,直線與直線的距離點的求解知識,可以檢視 圓柱的表示方法是,圓柱中心軸方向,半徑,原點到圓柱中心軸的距離。附上 線與圓柱的交點 public static int linetocircularcylinderpoint circularcylinder c,vector3 p1,vect...
3dmath 空間點到直線的距離與距離點
計算這個,我們首先要知道一點向量的基本知識,點乘和叉乘的幾何意義。點乘 求的乙個向量到另乙個向量的投影,結果是乙個數。叉乘 求垂直於2個向量的向量,結果是乙個向量。已知p1,p2 p 求p 到p1 p2上的距離點 px p1到px的距離為 k p p1 p2 p1 normalized px p1 ...
直線與球體的交點lisp 直線與橢球體相交
示意圖 上述示意圖中,該方法思路不是直接求取射線與橢球體的交點,而是利用變換矩陣,轉化為求取與位於原點的單位球體的交點。首先要基於當前橢球體,構建與空間中位於原點的單位球體之間的變換矩陣,該變換可能包括位移,縮放以及旋轉,採用圖形學中的齊次座標形式表示 位移矩陣 旋轉矩陣 縮放矩陣 則,組合變換矩陣...