Ray Sphere 相交測試

2021-07-05 18:02:47 字數 1076 閱讀 8698

ray:

// data member

vector3f origin;

vector3f direction;

sphere:

// data member

vector3f origin;

float radius;

測試ray sphere是否相交:

球心為o , 光線的起點為a,以點a向球發射切線,設點b為切點

則當光線在圖示的椎體中時,光線與球產生相交

在椎體之外,則無相交

並且當光線從ab變換到ac時,角度

θ 逐漸增大,則oa在ray方向上的投影為oa

∗cos(θ

) ,隨著

θ 的增大,投影逐漸變小,也就是說當沿著ray方向的投影長度小於ab時,說明與球無交點,當沿著ray方向的投影長度大於或等於ab時,則說明與球存在交點

vector3f delta = m_ray.origin - m_sphere.center; // 向量oa

// 向量ab的長度的平方,也可以用於判斷ray的起點是否在球內

float fa0 = delta.dot(delta) - m_sphere.radius * m_sphere.radius;

if(fa0 <= 0.0f)

// 向量oa在ray方向上的投影長度

float fa1 = m_ray.direction.dot(delta);

// 若fa1大於0.0f,則說明ray的direction與oa的夾角小於90度

// 則與球必定無交點

if(fa1 >= 0.0f)

return (fa1 * fa1 >= fa0);

2018 11 05測試T3 相交

傳送門 一道不錯的題 首先,要知道乙個東西,即若兩條路徑相交,則一條路徑的 lca lcalc a 必然在另一條路徑上 我們每加入一條邊,都計算一下之前的邊加上它對答案的貢獻 現在假設加 a,b a,b a,b 條邊,具體有一下幾種情況 統計 a,b a,b a,b 這條路徑上的 lca lcalc...

兩圓相交求相交面積

1.海 式 2.余弦公式cosa public double areaofintersectionofcircles int firstx,int firsty,int firstr,int secondx,int secondy,int secondr alpha math.acos d d fi...

矩陣相交 矩形相交以及求出相交的區域的原理解析

解決關鍵點 仔細觀察下圖,想到另一種思路,那就是判斷兩個矩形的中心座標的水平和垂直距離,只要這兩個值滿足某種條件就可以相交。化思路 問題 給定兩個矩形a和b,矩形a的左上角座標為 xa1,ya1 右下角座標為 xa2,ya2 矩形b的左上角座標為 xb1,yb1 右下角 座標為 xb2,yb2 1 ...