nyoj 3 多邊形重心問題

2021-09-26 21:58:37 字數 1442 閱讀 3734

時間限制:

3000 ms  |  記憶體限制:65535 kb

難度:5

描述

在某個多邊形上,取n個點,這n個點順序給出,按照給出順序將相鄰的點用直線連線, (第乙個和最後乙個連線),所有線段不和其他線段相交,但是可以重合,可得到乙個多邊形或一條線段或乙個多邊形和乙個線段的連線後的圖形;

如果是一條線段,我們定義面積為0,重心座標為(0,0).現在求給出的點集組成的圖形的面積和重心橫縱座標的和;

輸入

第一行有乙個整數0

輸出輸出每個多邊形的面積、重心橫縱座標的和,小數點後保留三位;

樣例輸入

3

3  0 1

0 20 3

3  1 1

0 00 1

4  1 1

0 00 0.5

0 1

樣例輸出

0.000 0.000

0.500 1.000

0.500 1.000

/*

* 注意:

1、浮點數定義為3位輸出,但輸出4位的原因 -- 未加換行符

分析:1、因為n邊形可以通過n個三角形組成,所以只需要計算n個三角形的面積;

2、通過叉積公式可以計算三角形面積 s = (b-->a(x)) * (c-->a(y)) - (c-->a(x)) * (b-->a(y)),

2.0、為了簡化題目定義a為原點,s = (b(x)) * (c(y)) - (c(x)) * (b(y));

3、三角形重心 (x):(叉積 / 2.0) * (0 + b(x) + c(x)) / 3.0;

3.0、三角形重心 (y) 類似與(x)

**/

c/c++**實現:

#include #include 

#include

#include

#include

#include

#include

using

namespace

std;

intt, n;

double area, sum_x, sum_y, pri_1 = 0

;struct

node p[

10005

];double cross_pro (int

n) int

main ()

area =fabs (area);

if (area <= 0.0000001) printf ("

0.000 0.000\n");

else printf ("

%.3lf %.3lf\n

", area, fabs ((sum_x + sum_y) /area ));

}return0;

}

NYOJ 3 多邊形重心問題

int abs int i 處理int型別的取絕對值 double fabs double i 處理double型別的取絕對值 float fabsf float i 處理float型別的取絕對值 時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述在某個多邊形上,取n個點,這n個...

NYOJ 3 多邊形重心問題

題目描述 在某個多邊形上,取n個點,這n個點順序給出,按照給出順序將相鄰的點用直線連線,第乙個和最後乙個連線 所有線段不和其他線段相交,但是可以重合,可得到乙個多邊形或一條線段或乙個多邊形和乙個線段的連線後的圖形 如果是一條線段,我們定義面積為0,重心座標為 0,0 現在求給出的點集組成的圖形的面積...

NYOJ 3 多邊形重心

時間限制 3000 ms 記憶體限制 65535 kb 難度 5 描述在某個多邊形上,取n個點,這n個點順序給出,按照給出順序將相鄰的點用直線連線,第乙個和最後乙個連線 所有線段不和其他線段相交,但是可以重合,可得到乙個多邊形或一條線段或乙個多邊形和乙個線段的連線後的圖形 如果是一條線段,我們定義面...