谁能告诉我为什么sum_area输出总是0(多边形重心问题)
多边形重心问题
- 描述
- 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以重合,可得到一个多边形或一条线段或一个多边形和一个线段的连接后的图形;
如果是一条线段,我们定义面积为0,重心坐标为(0,0).现在求给出的点集组成的图形的面积和重心横纵坐标的和;
- 输入
- 第一行有一个整数0<n<11,表示有n组数据;
每组数据第一行有一个整数m<10000,表示有这个多边形有m个顶点; - 输出
- 输出每个多边形的面积、重心横纵坐标的和,小数点后保留三位;
- 样例输入
-
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
#include<iostream>
#include<cmath>
#include<vector>
using namespace std;
struct Poit
{
double x;
double y;
};
double Area_3(Poit C,Poit A,Poit B);
int main()
{
int m;
cin>>m;
for(int i=0;i<m;i++)
{
int n;
cin>>n;
vector<Poit>a;
Poit G={0,0}; //G为重心
double sum_area=0; //总面积
double Gxy; //重心横纵坐标和
for(int j=0;j<n;j++)
{
int x0,y0;
cin>>x0>>y0;
Poit p={x0,y0};
a.push_back(p);
}
for(int k=0;k<n;k++)
{
G.x=G.x+a[k].x;
G.y=G.y+a[k].y;
}
G.x=G.x/n;
G.y=G.y/n;
Gxy=G.x+G.y;
a.push_back(a[0]); //最后的和0重和;
for(int h=0;h<n;h++) //求总面积
{
sum_area=sum_area+Area_3(a[h],a[h+1],G);
}
cout<<sum_area<<" "<<Gxy<<endl;
}
return 0;
}
double Area_3(Poit C,Poit A,Poit B) //为了保证角A为锐角;B为重心;
{
double a,b,c;
double area;
a=sqrt(pow((B.x-C.x),2)+pow((B.y-C.y),2));
b=sqrt(pow((A.x-C.x),2)+pow((A.y-C.y),2));
c=sqrt(pow((A.x-B.x),2)+pow((A.y-B.y),2));
double cos_A=(pow(b,2)+pow(c,2)-pow(a,2))/(2*b*c);
double sin_A=abs(sqrt(1-pow(cos_A,2)));
area=0.5*b*c*sin_A;
return area;
}
谁能告诉我为什么sum_area输出总是0(多边形重心问题)的更多相关文章
- 输入一个正整数n,生成一张2的乘方表,输出2*0—2*n的值。
#include<stdio.h>#include<math.h> //程序中调用幂函数pow(),需包含头文件math.h//void main(){ int i,n; pr ...
- printf 输出前导0
printf ("%3d\n", 5); printf ("%03d\n", 5); 输出为
- C_输入一个整数N,输出从0~N(算法思考)
1.for循环实现 #include <stdio.h> #include <time.h> clock_t start, stop; double duration; voi ...
- for循环输出9~0
示例 for(var i = 9; i>-1;i--){ println(i) } function println(a) { document.write(a+"<br> ...
- Nginx 实现 HTTPS(基于 Let's Encrypt 的免费证书)
SSL / TLS加密会为您的用户带来更高的搜索排名和更好的安全性. Let’s Encrypt 是一个认证机构(CA).它可以提供免费证书,并且已经被大多数浏览器所信任.另外,通过工具 Certbo ...
- PAT 1086 就不告诉你(15 )(代码)
1086 就不告诉你(15 分) 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定的 ...
- 创建有输出参数的存储过程并在c#中实现DataGridView分页功能
不足之处,欢迎指正! 创建有输出参数的存储过程 if exists(select * from sysobjects where name='usp_getPage1') drop procedure ...
- springboot+logback日志输出企业实践(上)
目录 1.引言 2.logback简介 3. springboot默认日志框架-logback 3.1 springboot示例工程搭建 3.2 日志输出与基本配置 3.2.1 日志默认输出 3.2. ...
- PAT (Basic Level) Practice (中文)1086 就不告诉你 (15分)
1086 就不告诉你 (15分) 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定的 ...
随机推荐
- Hibernate征途(三)之CRUD
上篇博客<Hibernate征途(二)之基础与核心>介绍了Hibernate的基础内容和核心内容,这篇博客简单实践一下.第一篇博客也说过Hibernate是一种JDBC的简化方案,既然是和 ...
- 数字温湿度传感器DHT11--操作源代码
//IO定义 #define P_DataIN_DHT11 PB0_IN #define P_DataOUT_DHT11 PB0_OUT //宏定义 #define BSET_DHT11 P_Data ...
- 绿色mysql启动脚本
启动脚本如下:./mysqld_safe --defaults-file=/export/servers/mysql-5.5.38/my.cnf --ledir=/export/servers/mys ...
- ckplayer网页播放器简易教程
前言 ckplayer是一款在网页上播放视频的免费视频插件,该插件兼容性强.使用简单.api齐全.另外,任何个人网站或商业网站在不修改右键版权的基础上都可以免费使用. 下面将对ckplayer的整个使 ...
- C#核编之字符串类型介绍与操作
一.关于字符串操作的方法 System.String类提供了很多工具方法,包括返回字符数据长度,查找当前字符串中的子字符串和转换大小写等方法. 在String类中常用的比较字符串的方法主要有Compa ...
- 缓存 Array.length 是老生常谈的小优化
问题 缓存 Array.length 是老生常谈的小优化. // 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = ...
- UVA 10570 Meeting with Aliens
题意: N个外星人围成一桌坐下,有序的排列指N在N-1与N+1中间,现在给出一个序列,问至少交换几次可以得到有序的序列. 分析: 复制一遍输入序列,放在原序列之后.相当于环.通过枚举,可以把最小交换次 ...
- SQL语言学习-数据定义语言
Sql语言至今已经有6个版本.SQL查询语言包括了所有对数据的操作命令,这些操作可分为四类:数据定义语言(DDL).数据操纵语言(DML).数据控制语言(DCL)和嵌入式SQL语言. 数据定义语言(D ...
- 异步消息处理机制——Handler用法
Handler 1. Message Messsge是线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据,Message的what字段,除此之外还可以使用arg1和arg2字段 ...
- 启动程序的c++方法
#include <Windows.h> void main() { WinExec( "notepad.exe fitdata.txt", SW_SHOW ); // ...