判斷兩個凸多邊形是否相交 SAT

2021-08-19 09:44:08 字數 1149 閱讀 4514

最近在看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判斷兩個多邊形是否相交 分離軸定律

預備知識 向量的點積 關於向量的知識這裡不再贅述 概念 通過判斷任意兩個凸多邊形在任意角度下的投影是否均存在重疊,來判斷是否發生碰撞。若在某一角度光源下,兩物體的投影存在間隙,則為不碰撞,否則為發生碰撞。圖例 在程式中,遍歷所有角度是不現實的。那如何確定投影軸呢?其實投影軸的數量與多邊形的邊數相等即...