2012-04-01 8 views
1

これはちょっとみんな私が取り組んでいる宿題のパズルです。ポリゴンの頂点で外角を計算する

私は三つの頂点のリストを持っていますが、私は既にそれらが会う内角を計算する方法を考え出しました(私はこれらが有効な角度を持っていることをテストしてポリゴンが有効なポリゴン)。

現在、私は、その時点でベクトル積のACOSを取得し、私は上の角度をしたい頂点にエッジを計算し、行の3つの頂点を摘み取る:

  double dx21 = one.x - two.x; 
      double dx31 = three.x - two.x; 
      double dy21 = one.y - two.y; 
      double dy31 = three.y - two.y; 
      double m12 = Math.sqrt(dx21*dx21 + dy21*dy21); 
      double m13 = Math.sqrt(dx31*dx31 + dy31*dy31); 
      double theta = Math.acos((dx21*dx31 + dy21*dy31)/ (m12 * m13)); 

私は名目上知っています360度から内角を引いて外角をつかむこともできますが、これはポリゴンが有効であることを確認する上での正当性チェックです(頂点は反時計回りです)。

頂点でのベクトル積の罪が確実であることを確認することでしたが、私はこれをしばらくの間紙でやっていました。

私はそれが主に数学問題だと知っていますが、アドバイスは本当に便利です。

+0

これらはすべて反時計回りの順序で編成されることを意図した2次元ベクトルです。 – Schroedinger

答えて

2

ここにいくつかの注意があります。

最初に、外角は通常180度 - 内角、または内角 - あなたの単位に依存します。 hereを参照してください。クイックサニティチェックは、あなたが円を得るために外角を一緒に加えることです。

第2に、あなたはこれを知っているかもしれませんが、Math.acosが度ではなくラジアンで角度を返すことを指摘しておきます。

第3に、余弦は凸と凹の角度を区別できないことに注意してください。つまり、内角法は凸多角形に対してのみ有効です。クロス製品を使って作業する方が良いかもしれません。角度の正弦波が得られます。

最後に、あなたの質問になると、ここにヒントがあります:p2-> p1とp2-> p3のベクトルを見てみましょう。私が問題を読むと、p1→p2とp2→p3のそれぞれのベクトルが描かれました。いずれかが問題を解決するための完全に有効な方法ですが、これらのベクトルのペアの角度がどのように異なっているのか、それがあなたの問題にどのように関係しているかを考えてください。

+0

私は結局これを混乱させてしまい、とにかく助けてくれた。 – Schroedinger

関連する問題