dtIntersectSegmentPoly2D 2D上的線段與多邊形相交計算 產生結果:是否相交,線段跨越的開始和結束百分比,相交的邊
阿新 • • 發佈:2018-04-24
align lin wid con ont html jpg erp const
dtIntersectSegmentPoly2D(startPos, endPos, verts, nv, tmin, tmax, segMin, segMax):
http://geomalgorithms.com/vector_products.html
perp product也就是
2D外積
inline float dtVperp2D(const float* u, const float* v)
{
return u[2]*v[0] - u[0]*v[2];
}
所有的都是映射到xz平面上進行的。
const float n = dtVperp2D(edge, diff);表示的是diff product edge
const float d = dtVperp2D(dir, edge);
fabsf(d) < EPS 表示edge與要測試的這條線平行,
n < 0表示edge在diff的右邊,則表示沒機會相交了,
如果>=0 也就是有可能與多邊形相交,continue
t = n / d;
d<0 說明dir在edge的右邊
也就是說明dir是向著多邊形裏面來的
總之這個函數判斷線段與poly是否相交
segMin和segMax分別表示最先和最後碰撞到的線段
tmin,tmax表示的是這條線段目前相交的部分是從百分之多少到百分之多少
如果終點在polygon裏面,則tmax大於1
以tmin計算為例:
很明顯檔t=0的時候說明n=0說明出發點在edge上
dtIntersectSegmentPoly2D 2D上的線段與多邊形相交計算 產生結果:是否相交,線段跨越的開始和結束百分比,相交的邊