1. ホーム

[解決済み】ある点が2次元の三角形の中にあるかどうかを判断する方法は?[クローズド]

2022-03-29 20:19:09

質問

ある点が三角形の内側にあるかどうかを簡単に判断する方法はありますか?3Dではなく2Dです。

どのように解決するのですか?

一般に、最も単純な(そしてかなり最適な)アルゴリズムは、点がエッジの作る半平面のどの側にあるかをチェックすることです。

質の高い情報はこちら 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);
}