Luogu P1183 多边形的面积 「解题报告」&&「用向量积计算多边形面积」笔记
时间:2019-08-24
本文章向大家介绍Luogu P1183 多边形的面积 「解题报告」&&「用向量积计算多边形面积」笔记,主要包括Luogu P1183 多边形的面积 「解题报告」&&「用向量积计算多边形面积」笔记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
P1183 多边形的面积
题意
给出一多边形的\(n\)个顶点,求它的面积。多边形的边都是垂直或平行于坐标轴的。
解析
向量积
\(\vec{a}\cdot\vec{b}\) 可以解释为以 \(a\) 和 \(b\) 为邻边的平行四边形面积
\[
\vec{a}\cdot\vec{b}=|\vec{a}|\cdot|\vec{b}|\cdot\sin\theta
\]
因为本题中 \(\theta=90^\circ\) 所以 \(\sin\theta=1\)
求三角形ABC的面积,根据向量积的意义,得到:\(S=|\vec{AB}\times\vec{AC}|/2\)
于是
求多边形面积的方法就是用剖分来做的,把多边形分成若干个三角形,求每个三角形的面积。
以顶点逆时针排列为例剖分:
对于三角形 \(P_1P_aP_b\) 其面积的正负取决于它是右手系还是左手系(注意是逆时针顶点
左手系,负面积 |
右手系,正面积 |
剖分的顶点默认\((0,0)\),于是可以得出计算多边形面积的公式
\[
S=[\sum^{n-1}_1{(\vec{PP_i}\times\vec{PP_{i+1}})+(\vec{PP_n}\times\vec{PP_1})}]\div2
\\\quad\:\:\:\:=[\sum_1^{n-1}{(x_iy_{i+1}-x_{i+1}y_i)+(x_ny_1-x_1y_n)}]\div2
\]
代码
#include<iostream>
using namespace std;
int n;
double ans;
struct node
{
int x;int y;
}dot[101];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>dot[i].x>>dot[i].y;
for(int i=1;i<=n;i++)
ans+=(dot[i].x*dot[i+1].y-dot[i+1].x*dot[i].y);
ans+=(dot[n].x*dot[1].y-dot[1].x*dot[n].y);
cout<<ans/2<<endl;
return 0;
}
原文地址:https://www.cnblogs.com/JHTBlog/p/11406427.html
- 019 单例模式的5种写法
- 图书管理系统【部署开发环境、解决分类、图书、前台页面模块】
- 图书管理系统【用户、购买、订单模块、添加权限】
- 04-02.总结switch,for,while,do。while跳转语句
- 图书管理系统【总结】
- JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
- JDBC【事务、元数据、改造JDBC工具类】
- JDBC【数据库连接池、DbUtils框架、分页】
- HTTP常见面试题
- Java基础-18(01)总结Map,HashMap,HashMap与Hashtable区别,Collections工具类
- 一个oracle查询引起的bug (r4笔记第59天)
- Java基础-18(02)总结Map,HashMap,HashMap与Hashtable区别,Collections工具类
- 特殊的物化视图刷新 (r4笔记第77天)
- 通过单例模式模拟RAC连接 (r4笔记第76天)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据结构算法操作试题(C++/Python)——在排序数组中查找元素的第一个和最后一个位置
- 数据结构算法操作试题(C++/Python)——搜索旋转排序数组
- 数据结构算法操作试题(C++/Python)——最后一个单词的长度
- IDEA 自动生成类注释和方法注释
- 包管理工具yarn的安装和使用详细介绍
- redis学习(九)
- 模型性能提升操作
- FM算法解析及Python实现
- 排序算法:快速排序解析及Python实现
- dubbo学习之本地存根实践
- vue3.0 加载json的“另类”方法(非ajax) 定义组件.vue文件
- pyhon3 安装 web 出错 ERROR: No matching distribution found for web
- tensorflow gpu 运行出现OOM错误
- jquery getJSON不执行问题解决
- python函数——创建文件夹