3dmath 直線與圓錐的交點(無底面的圓錐)

2021-09-24 13:59:57 字數 1494 閱讀 9007

裡面大部分計算 與圓柱的交點類似,可以看下圓柱交點的推導過程:

點到直線的距離參考:

通過上面的公式求得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 直線與橢球體相交

示意圖 上述示意圖中,該方法思路不是直接求取射線與橢球體的交點,而是利用變換矩陣,轉化為求取與位於原點的單位球體的交點。首先要基於當前橢球體,構建與空間中位於原點的單位球體之間的變換矩陣,該變換可能包括位移,縮放以及旋轉,採用圖形學中的齊次座標形式表示 位移矩陣 旋轉矩陣 縮放矩陣 則,組合變換矩陣...