0%

判断一个点是否在扇形区域内

判断一个点是否在扇形区域内


判断点$P$是否在以点$A$为圆心,点$B$,$C$为两个角的扇形内


重心法


1.比较$\vec {AP}$ 和$\vec {AB}$的长度,判断是否在圆内

2.

u>=0,v>=0则点$P$在$\vec {AB}$和$\vec {AC}$的夹角内


1
2
3
4
5
6
7
8
9
10
bool IsPointInFan(lt::Vector2<float> p, lt::Vector2<float> a, lt::Vector2<float> b, lt::Vector2<float> c) {
lt::Vector2<float> ap = p - a;
lt::Vector2<float> ab = b - a;
lt::Vector2<float> ac = c - a;
if (ap.x * ap.x + ap.y * ap.y > ab.x * ab.x + ab.y * ab.y) { return false; }
float u = 0, v = 0;
u = (ap.x * ac.y - ac.x*ap.y) / (ab.x * ac.y - ac.x * ab.y);
v = (ap.x * ab.y - ab.x*ap.y) / (ac.x * ab.y - ab.x * ac.y);
return u >= 0 && v >= 0;
}