6

次のように、それらの交点がポリゴンを表すがいくつかあります。

メインポリゴン

私は線の順序とそれらの方程式を知っています。

内角を見つけるために、私は各線の方向を見つけました。しかし、2つの線の方向を引くと、ポリゴンの辺の順序で行ったとしても、2つの異なる角度が得られるため、混乱しました。

たとえば、次の画像で、線の方向を差し引くと、次の角度のいずれかが得られます。

欠陥1

私をさらに混乱させたのは、ポリゴンが凸面でない場合、角度が180を超え、私のアプローチを使用すると、正しい角度がまったく得られないことです。

欠陥2

そして、私はこの問題への取り組み方が間違っていることに気づきました。

では、線だけを使って内角を見つける最良の方法は何ですか?凸多角形の場合、ベクトルを見つけてからそれらの間の角度を見つけることができますが、私の例のP6の場合でも、ベクトルアプローチは失敗します。

とにかく、私はその凹面の問題を解決するための条件付きのケースを含まない方法を好みます。

ありがとう。

4

1 に答える 1

9

順序付けられた線を使用すると、交点 (ポリゴンの頂点) を時計回りに見つけることができます。次に、内角を計算できます。

Angle[i] =  Pi + ArcTan2(V[i] x V[i+1], V[i] * V[i+1]) 

(すべての頂点の入力ベクトルと出力ベクトルの外積と内積)

また

Angle[i] = Pi + ArcTan2( dx_in*dy_out-dx_out*dy_in, dx_in*dx_out+dy_in*dy_out2 )

注:Pi反時計回りの場合は、後ろのプラス記号をマイナスに変更します。

編集:

crossproduct と dotproduct はベクトルではなくスカラーであることに注意してください。

データの例:

dx1 = 5; dy1 = -15; dx2 = -15; dy2 = 5

Angle = Pi + ArcTan2(5*5-15*15, -5*15-5*15) = Pi - 2.11 radians ~ 59 degrees

ベクトルの例:

(0,-1) (1,0) (L-curve)

Angle = Pi + ArcTan2(1, 0) =  270 degrees
于 2012-08-23T11:40:39.660 に答える