任意多边形的求解c语言
2016-11-05 01:20
232 查看
杭电2037题
#include <stdio.h>
int main(void)
{
int n,i;//n个坐标
double sum;//面积
int site[150][2];//每个坐标
while(scanf("%d",&n)!=EOF)//获得输入
{
if(n==0)
break;//0时跳出
for(i=0;i<n;i++)
scanf("%d %d",&site[i][1],&site[i][2]);//获得坐标输入
for(i=1,sum=0;i<n;i++)
sum+=(site[i-1][1]*site[i][2]-site[i-1][2]*site[i][1])*0.5;
sum+=(site[n-1][1]*site[0][2]-site[n-1][2]*site[0][1])*0.5;//面积计算
printf("%.1f\n",sum);//输出面积
}
return 0;
}
由这道可以得出经验:
1、任意多边形都可以用向量叉乘来得出,向量叉乘是有正负的,坐标向量叉乘公式:
(x1,y1)*(x2,y2)=x1*y2—x2*y1;
而关于向量相乘的正负,如上图P>A>B是一个顺时针的走向,则其叉乘势负值,若是逆时针,则是正值;
2、重要的一点,在程序的实现时所有的点都必须是逆时针输入运算的,不然算出的答案会是错的。
#include <stdio.h>
int main(void)
{
int n,i;//n个坐标
double sum;//面积
int site[150][2];//每个坐标
while(scanf("%d",&n)!=EOF)//获得输入
{
if(n==0)
break;//0时跳出
for(i=0;i<n;i++)
scanf("%d %d",&site[i][1],&site[i][2]);//获得坐标输入
for(i=1,sum=0;i<n;i++)
sum+=(site[i-1][1]*site[i][2]-site[i-1][2]*site[i][1])*0.5;
sum+=(site[n-1][1]*site[0][2]-site[n-1][2]*site[0][1])*0.5;//面积计算
printf("%.1f\n",sum);//输出面积
}
return 0;
}
由这道可以得出经验:
1、任意多边形都可以用向量叉乘来得出,向量叉乘是有正负的,坐标向量叉乘公式:
(x1,y1)*(x2,y2)=x1*y2—x2*y1;
而关于向量相乘的正负,如上图P>A>B是一个顺时针的走向,则其叉乘势负值,若是逆时针,则是正值;
2、重要的一点,在程序的实现时所有的点都必须是逆时针输入运算的,不然算出的答案会是错的。
相关文章推荐
- 利用C语言求解一元二次方程组的解
- C语言实现迷宫求解问题(附源代码)
- 列梅兹remez算法求解最佳一致逼近多项式(C语言实现)
- 八皇后问题-C语言求解
- C语言进阶-第6讲:递归法问题求解(易列写递归方程)
- C语言求解素数(质数)的优化:打印100-200之间的素数
- C语言求解布尔矩阵的布尔积运算
- 使用C语言求解扑克牌的顺子及n个骰子的点数问题
- C语言实现“关键路径”的求解
- C语言 迷宫问题求解(顺序栈应用示例)
- 求解 s = (1*1)!+(2*2)! + (3*3)!+...+(n*n)! (C语言)
- C语言实现Hanoi(汉诺塔)问题的递归求解
- 【C语言】最长子序列问题求解
- C语言及程序设计进阶例程-24 查找问题及其求解
- 黑马程序员--汉诺塔问题的递归求解C语言
- 梅森素数(C语言求解)
- 迷宫求解(C语言)
- C语言初步-第39讲:问题求解——求素数(输出格式控制)
- 第1周 C语言及程序设计初步 例程-7 问题求解方法——迭代
- C语言实现定积分求解方法