最近在看recast&detour原始碼的時候有遇到許多數學上的演算法問題,特此記錄,以便以後檢視。
介紹
應用分離軸定理 sat ,看是否能找到分離軸,如果能找到那麼就是不相交。否則相交。
利用點積的幾何意義: 投影
判斷 polya 和 polyb 兩個多邊形是否相交
計算多邊形在某條軸上的相對投影範圍/// all vertices are projected onto the xz-plane, so the y-values are ignored.
const float* polyb, const int npolyb)
; float amin,amax,bmin,bmax;
projectpoly(n, polya, npolya, amin,amax);
projectpoly(n, polyb, npolyb, bmin,bmax);
if (!overlaprange(amin,amax, bmin,bmax, eps))
}for (int i = 0, j = npolyb-1; i < npolyb; j=i++)
; float amin,amax,bmin,bmax;
projectpoly(n, polya, npolya, amin,amax);
projectpoly(n, polyb, npolyb, bmin,bmax);
if (!overlaprange(amin,amax, bmin,bmax, eps))
}return true;
}
判斷是否區域有重疊static void projectpoly(const float* axis, const float* poly, const int npoly,
float& rmin, float& rmax)
}
inline bool overlaprange(const float amin, const float amax,
const float bmin, const float bmax,
const float eps)
判斷乙個多邊形是否是凸多邊形
乙個很簡單的問題看了好久,但就是提交不過,也看不出是哪齣了問題 問題為 判斷乙個多邊形是否是凸多邊形 我的思路是這樣的 建立x,y這兩個陣列用來存放座標,計算兩個向量,然後讓計算它們的叉積,如果叉積小於零,說明後乙個向量在前乙個向量的右側,即順時針方向,只要有乙個是這樣的情況,則不符合條件。然後就是...
驗證多邊形是否為凸多邊形
驗證多邊形是否為凸多邊形 2108 shape of hdu include define debug 0 int crossmulti int x0,int y0,int x1,int y1,int x2,int y2 int main int n,i int f x,f y 第1個點 int s...
egret判斷兩個多邊形是否相交 分離軸定律
預備知識 向量的點積 關於向量的知識這裡不再贅述 概念 通過判斷任意兩個凸多邊形在任意角度下的投影是否均存在重疊,來判斷是否發生碰撞。若在某一角度光源下,兩物體的投影存在間隙,則為不碰撞,否則為發生碰撞。圖例 在程式中,遍歷所有角度是不現實的。那如何確定投影軸呢?其實投影軸的數量與多邊形的邊數相等即...