我想建立一个函数,该函数将对画布中三角形中的点进行排序,并丢弃其余的点。 我遵循了this主题,并提出了这个建议,
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)
{
bool b1, b2, b3;
b1 = sign(pt, v1, v2) < 0.0f;
b2 = sign(pt, v2, v3) < 0.0f;
b3 = sign(pt, v3, v1) < 0.0f;
return ((b1 == b2) && (b2 == b3));
}
问题是我想高效地做到这一点,而不需要遍历画布中的所有点。 (就像直接找到它们一样)
整个场景如下图所示。三角形的两个顶点位于画布的两个右角,其余的位于中间的某个位置。所有顶点都是已知的。白点被丢弃,而橙色点被返回。
编辑:注意:点的颜色在这里不起作用。我给它们上色以显示其中的其中一个