簡單多邊形~判斷此多邊形是順時針還是逆時針。


鏈接:https://www.nowcoder.com/acm/contest/110/B
來源:牛客網

題目描述

為了讓所有選手都感到開心,Nowcoder練習賽總會包含一些非常基本的問題。 比如說:
按順時針或逆時針方向給你一個簡單的多邊形的頂點坐標,請回答此多邊形是順時針還是逆時針。

輸入描述:

輸入包含N + 1行。
第一行包含一個整數N,表示簡單多邊形的頂點數。
在下面的N行中,第i行包含兩個整數x
i
,y
i
,表示簡單多邊形中的第i個頂點的坐標。

輸出描述:

如果簡單多邊形按順時針順序給出,則在一行中輸出“clockwise”(不帶引號)。 否則,打印"counterclockwise''(不帶引號)。
示例1

輸入

3
0 0
1 0
0 1

輸出

counterclockwise
示例2

輸入

3
0 0
0 1
1 0

輸出

clockwise

備注:

3≤N≤30
-1000≤x
i
,y
i
≤1000
數據保證,這個簡單多邊形的面積不為零。

 

原地址 https://www.cnblogs.com/kyokuhuang/p/4250526.html

這是公式推導過程。


 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 typedef long long LL ;
 7 int x1, x2, t1, y2;
 8 int a[50], b[50];
 9 int main() {
10     int  n;
11     scanf("%d", &n);
12     for (int i = 0 ; i < n ; i++) {
13         scanf("%d%d", &a[i], &b[i]);
14     }
15     double d = 0;
16     for(int i = 0; i < n - 1; i++) {
17         d += -0.5 * (b[i + 1] + b[i]) * (a[i + 1] - a[i]);
18     }
19     if(d > 0)cout << "counterclockwise" << endl;
20     else   cout << "clockwise" << endl;
21     return 0;
22 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM