一連のポリラインが与えられた場合、角度タイプ(軸の原点の内側または外側)の検出に問題があることがわかりました。非常によく似た質問を何十も見つけましたが、どれも私の問題を解決しなかったので、何かが出てくることを期待してここに置きました。
私が持っているのはポリラインのセットだけです。(長方形に近い特定の許容誤差で)角度を見つけて、それらを内側または外側に分類する必要があります。
各ポリラインについて、頂点3 x 3を取得し、中心の頂点が角度であるかどうかを認識し、その値を0〜180度の数値として測定できます。
ここで、この角度に方向を指定する必要があります(たとえば、符号、鋭角が原点から離れる方向を向いている場合は負、中心を向いている場合は正)、次の2つの方法のいずれかで実装すると思いました。 、しかしそれらのどれも機能しませんでした。
1)「2次元外積の符号」(これは数学的に正しい用語ではないことを私は知っています):
//given 3 contiguous vertices a,b,c
//check if b is a inner (+1) or outer (-1) vertex (0 in other cases)
double cross = ((b.x - a.x)*(c.y - a.y)) - ((b.y - a.y)*(c.x - a.x));
if(cross > 0){
return 1;
} else if (cross < 0) {
return -1;
}
return 0;
しかし、それは左下の象限でのみ機能するようです。右上ではまったく逆の方法で機能しますが、他の象限ではねじ込まれ、理由がわかりません。
2)頂点のノルムを比較します
if b.norm() < a.norm() && b.norm() < c.norm
then return +1
else return -1
これは基本的なケースでのみ機能し、全体として軸を横切る(原点を含む)ポリラインはありません。すべてのケースをチェックできますが、それは避けたいと思います。
明らかに、頂点が2つのベクトル上にある2つの隣接点の間を通る線と比較して、原点の同じ側にあるかどうかを確認するなど、はるかに安全な方法があります。しかし、可能な限り最適化する必要があります。