1. 程式人生 > >dtIntersectSegmentPoly2D 2D上的線段與多邊形相交計算 產生結果:是否相交,線段跨越的開始和結束百分比,相交的邊

dtIntersectSegmentPoly2D 2D上的線段與多邊形相交計算 產生結果:是否相交,線段跨越的開始和結束百分比,相交的邊

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上的線段與多邊形相交計算 產生結果:是否相交,線段跨越的開始和結束百分比,相交的邊