多邊形重心問(wèn)題 java
看題目 點(diǎn)這里
題目描述:
描述
在某個(gè)多邊形上竖哩,取n個(gè)點(diǎn)哭廉,這n個(gè)點(diǎn)順序給出,按照給出順序?qū)⑾噜彽狞c(diǎn)用直線連接相叁, (第一個(gè)和最后一個(gè)連接)遵绰,所有線段不和其他線段相交,但是可以重合增淹,可得到一個(gè)多邊形或一條線段或一個(gè)多邊形和一個(gè)線段的連接后的圖形椿访;
如果是一條線段,我們定義面積為0,重心坐標(biāo)為(0,0).現(xiàn)在求給出的點(diǎn)集組成的圖形的面積和重心橫縱坐標(biāo)的和埠通;
輸入
第一行有一個(gè)整數(shù)0<n<11,表示有n組數(shù)據(jù)赎离;
每組數(shù)據(jù)第一行有一個(gè)整數(shù)m<10000,表示有這個(gè)多邊形有m個(gè)頂點(diǎn);
輸出
輸出每個(gè)多邊形的面積端辱、重心橫縱坐標(biāo)的和梁剔,小數(shù)點(diǎn)后保留三位;
樣例輸入
3
3
0 1
0 2
0 3
3
1 1
0 0
0 1
4
1 1
0 0
0 0.5
0 1
樣例輸出
0.000 0.000
0.500 1.000
0.500 1.000
本題的解題思路:
1.多邊形面積怎么求舞蔽。
將多邊形分割成多個(gè)三角形即可對(duì)三角形面積求和
2.三角形面積用叉積怎么求 荣病。
x2*y1-x1y2 詳細(xì)描述 點(diǎn)這里 當(dāng)然大家也可以自己去谷歌
3 求重心坐標(biāo)關(guān)系。
把多邊形的每個(gè)三角形看作一個(gè)質(zhì)量為面積的點(diǎn)渗柿,然后將每個(gè)點(diǎn)的橫坐標(biāo)和這個(gè)三角形的面積相乘后結(jié)果相加个盆。最終結(jié)果除以多邊形面積就是多邊形重心的X坐標(biāo)脖岛。Y同理求得。
具體代碼如下:
import java.util.Scanner;
public class Main {
public static void main(String args[]){
int n=0;
Scanner s=new Scanner(System.in);
n=s.nextInt();
for(int i=0;i<n;i++){
int n1=s.nextInt();
double data[][]=new double[n1][2];
double sc=0;
double sx=0;
double sy=0;
for(int j=0;j<n1;j++){
data[j][0]=s.nextDouble();
data[j][1]=s.nextDouble();
}
for (int j = 1; j <= n1; j++) {
double temp=(data[j % n1][0]*data[j-1][1]-data[j % n1][1]*data[j -1][0])/2.0;
sc=sc+temp;
sx=sx+temp*(data[j % n1][0]+data[j-1][0])/3;
sy=sy+temp*(data[j % n1][1]+data[j-1][1])/3;
}
//result取絕對(duì)值
if (sc - 0 < 0.0000001) {
System.out.println("0.000 0.000");
continue;
}
System.out.print(String.format("%.3f %.3f\n",sc,(sx + sy)/sc));
}
}
}