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 ...