2017-12-03 19 views
0

ポリゴンの頂点の順序が時計回りか反時計回りかを判断する方法は?

n行、各行には2つの整数が含まれています。 i番目の線にはxi、yiが含まれます。ポリゴンのi番目の頂点は時計回りまたは反時計回りです。このようなフォロー画像として、以上の2つの頂点が側に表示されている可能性があることに注意してください:

enter image description here

は今、あなたは、ポリゴンの頂点の順序は時計回りまたは反時計回りであることを判断する必要がありますか?

struct Node 
{ 
    int x, y; 

    Node operator-(Node node) const 
    { 
     Node t; 
     t.x = x - node.x; 
     t.y = y - node.y; 
     return t; 
    } 

    int operator*(Node node) const // I konow this is Cross-Product 
    { 
     return x * node.y - y * node.x; 
    } 
}node[1000]; 

for (int i = 0; i < n; i++) 
    scanf("%d %d", &node[i].x, &node[i].y); 

int tmp = 0; 

node[n].x = node[0].x, node[n].y = node[0].y; 

for (int i = 0; i < n; i++) 
    tmp += (node[i] * node[i + 1]); 

if (tmp > 0) 
     it is counterclockwise order; 

しかし、私はそれを証明することができ、コードを、理解していない:

C++のコードはありますか?

+0

"2行の整数を含む各行"とはどういう意味ですか?線は2つの端点で定義され、それぞれの端点は2つの数で定義されます。あなたは各*ポイント*が整数座標を持っていることを意味しますか? (それはあなたのコードから見えます) –

+0

@Rory Daultonはい。各点には整数座標があります。 – Limer

+0

@RoryDaulton:問題の説明の「行」はテキストの行、つまり行を参照しているとします。 – MvG

答えて

1

shoelace formulaは、を指向します。のポリゴンの領域です。したがって、その標識を調べることによって、方向を決定することができます。あなたが持っているコードは面積を2倍計算しますが、記号が重要なので、これは無関係です。

関連する問題