有没有一种简单的方法来确定一个点是否在三角形内?这是2D,不是3D。
一般来说,最简单(也是最佳)的算法是检查点在由边缘创建的半平面的哪一侧。
以下是有关 GameDev 的本主题的一些高质量信息,包括性能问题。
这里有一些代码可以帮助您入门:
float sign (fPoint p1, fPoint p2, fPoint p3) { return (p1.x - p3.x) * (p2.y - p3.y) - (p2.x - p3.x) * (p1.y - p3.y); } bool PointInTriangle (fPoint pt, fPoint v1, fPoint v2, fPoint v3) { float d1, d2, d3; bool has_neg, has_pos; d1 = sign(pt, v1, v2); d2 = sign(pt, v2, v3); d3 = sign(pt, v3, v1); has_neg = (d1 < 0) || (d2 < 0) || (d3 < 0); has_pos = (d1 > 0) || (d2 > 0) || (d3 > 0); return !(has_neg && has_pos); }