指向三角形测试,无需重复进行每个测试

时间:2018-07-26 13:19:14

标签: iterator iteration 2d point vertices

我想建立一个函数,该函数将对画布中三角形中的点进行排序,并丢弃其余的点。 我遵循了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));
}

问题是我想高效地做到这一点,而不需要遍历画布中的所有点。 (就像直接找到它们一样)

整个场景如下图所示。三角形的两个顶点位于画布的两个右角,其余的位于中间的某个位置。所有顶点都是已知的。白点被丢弃,而橙色点被返回。

Points in triangle

编辑:注意:点的颜色在这里不起作用。我给它们上色以显示其中的其中一个

0 个答案:

没有答案