博客
关于我
#2036:改革春风吹满地
阅读量:398 次
发布时间:2019-03-06

本文共 1183 字,大约阅读时间需要 3 分钟。

根据题意:

给你边数,和坐标,然后让你输出对应多边形的面积。

思路:先由坐标求三角形,然后多个三角形组合成多边形。

数学原理:

利用了已知三角形的三个顶点的坐标求面积的方法。

已知直角坐标系3点p(a,b),m(c,d),n(e,f) 求\(三角形pmn\)面积的表达式!

无论三角形的顶点位置如何,△PMN总可以用一个直角梯形(或矩形)和两个直角三角形面积的和差来表示

而在直角坐标系中,已知直角梯形和直角三角形的顶点的坐标,其面积是比较好求的。
下面以一种情形来说明这个方法,其它情形方法一样,表达式也一样(表达式最好加上绝对值,确保是正值)
如图情形(P在上方,M在左下,N在右下),过P作X轴的平行线L,作MA⊥L,NB⊥L(设P在A、B之间)
A、B的坐标是A(c,b),B(e,b)
所以\(PA=a-c,PB=e-a,AM=b-d,BN=b-f,AB=e-c\)
所以

S△PMN=S梯形AMNB-S△PAM-S△PBN

=(b-d+b-f)(e-c)/2-(b-d)(a-c)/2-(b-f)(e-a)/2
=(ad+be+cf-af-bc-de)/2

即:

三角形三顶点坐标分别为\(A(a,b),B(c,d),C(e,f)\),那么这个三角形的面积为

\(S=1/2*三阶行列式\)

三阶行列式为:

a b 1

c d 1

e f 1

多变形面积=(n[边数]-2)个三角形面积;

\(a*d+c*f+b*e-e*d-c*b-a*f\)

注:这里的a与b恒为x[0],y[0]

#include
using namespace std;double x[100], y[100];float func(int a, int b, int c, int d, int e, int f) { return (a*d + c * f + e * b - e * d - a * f - b * c) / 2.0;}int main() { ios::sync_with_stdio(false); int n; while (cin >> n && n) { for (int i = 0; i < n; ++i) { cin >> x[i] >> y[i]; } float ans = 0; for (int i = 0; i < n - 2; ++i) { ans += func(x[0], y[0], x[i + 1], y[i + 1], x[i + 2], y[i + 2]); } printf("%.1f\n", ans); } return 0;}

转载地址:http://heukz.baihongyu.com/

你可能感兴趣的文章
如何使用google搜索?
查看>>
Redis分布式锁的正确实现方式
查看>>
设计模式-抽象工厂模式
查看>>
IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
查看>>
IDEA 调试Java代码的两个技巧
查看>>
Vue 数组和对象更新,但视图未更新,背后的故事
查看>>
剑指Offer面试题:9.二进制中1的个数
查看>>
《你是在做牛做马还是在做主管》- 读书笔记
查看>>
.NET Core微服务之基于Steeltoe使用Spring Cloud Config统一管理配置
查看>>
重新温习软件设计之路(4)
查看>>
MySQL数据库与python交互
查看>>
python如何对字符串进行html转义与反转义?
查看>>
微软XAML Studio - WPF, Sliverlight, Xamarin, UWP等技术开发者的福音
查看>>
开发小白也毫无压力的hexo静态博客建站全攻略 - 躺坑后亲诉心路历程
查看>>
golang基础--类型与变量
查看>>
解决WebRTC中不同的浏览器之间适配的问题
查看>>
深入理解JavaScript函数
查看>>
【spring源码系列】之【xml解析】
查看>>
(在模仿中精进数据可视化07)星球研究所大坝分布可视化
查看>>
(数据科学学习手札02)Python与R在循环语句与条件语句上的异同
查看>>