相交 - 点是否在三角形内 - 同侧法
同侧法
点p在三角形三条边的同侧时,点p在三角形内。可以通过叉乘结果是否都为正或负来判断是否同侧
1) 三角形顶点逆时针时
1-a) ab与ap, bc与bp, ca与cp的夹角均为右手逆时针锐角,sin(锐角)>0,即:叉乘结果>0,此时p在三角形内。
1-b) bc与bp的夹角为0度,sin(0)=0,即:叉乘结果=0,此时p在三角形内。
1-c) bc与bp的夹角为右手顺时针锐角,sin(-锐角)<0,即叉乘结果<0,而ab与ap, ca与cp的夹角均为右手逆时针180度内(叉乘结果>0),符号不一致所以p在三角形外。
2) 三角形顶点为顺时针时
2-a) ab与ap, bc与bp, ca与cp的夹角均为右手顺时针锐角,sin(-锐角)<0,即:叉乘结果<0,此时p在三角形内。
2-b),2-c)与上面类似
//点是否在三角形内 public static bool IsPointInTriangle(Vector2 p, Vector2 a, Vector2 b, Vector2 c) { //确定顶点是顺时针还是逆时针 var ab = b - a; var ac = c - a; float cross = V2Cross(ref ab, ref ac); var ap = p - a; if (V2Cross(ref ab, ref ap) * cross < 0) return false; var bc = c - b; var bp = p - b; if (V2Cross(ref bc, ref bp) * cross < 0) return false; var ca = a - c; var cp = p - c; if (V2Cross(ref ca, ref cp) * cross < 0) return false; return true; } public static float V2Cross(ref Vector2 a, ref Vector2 b) { float result = a.x * b.y - a.y * b.x; return result; }
内角和法
如果∠pab+∠pba+∠pbc+∠pcb+∠pca+∠pac等于180度,则p在三角形内;否则不在三角形内。
效率较低,这边没有实现。
投影法判断(待写)
参考
【数学基础】玩法常用几何计算汇总 - 知乎 (zhihu.com)
分类:
2d碰撞检测 / 1_点
, 2d碰撞检测
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单