啥叫重心?

我把它抽象的理解为几个顶点均分权重。三个点及以上才能构成一个简单的平面多边形,三角形是最简单的多边形。三角形的重心就是三个顶点均分权重。

三角形重心

通过一个三角形重心公式来看多边形重心公式,若一个三角形有三个点,分别为(x1,y1),(x2,y2),(x3,y3),那么三角形的重心公式为:
x=x1+x2+x33,y=y1+y2+y33x=\frac{x1+x2+x3}{3}, y=\frac{y1+y2+y3}{3}x=3x1+x2+x3​,y=3y1+y2+y3​
每个点的横权值相加除以3,每个纵权值相加除以3。

多边形重心

现在我们有一个五边形,有5个点,其中S1为三角形△ABC的面积,同理有S2,S3。

先给出它的重心公式:
x=(x1+x2+x3)s1+(x1+x3+x4)s2+(x1+x4+x5)s33(s1+s2+s3)x=\frac{(x1+x2+x3)s1+(x1+x3+x4)s2+(x1+x4+x5)s3}{3(s1+s2+s3)}x=3(s1+s2+s3)(x1+x2+x3)s1+(x1+x3+x4)s2+(x1+x4+x5)s3​
y=(y1+y2+y3)s1+(y1+y3+y4)s2+(y1+y4+y5)s33(s1+s2+s3)y=\frac{(y1+y2+y3)s1+(y1+y3+y4)s2+(y1+y4+y5)s3}{3(s1+s2+s3)}y=3(s1+s2+s3)(y1+y2+y3)s1+(y1+y3+y4)s2+(y1+y4+y5)s3​
相当于求出三个三角形的重心,再根据三角形的面积去均分权重。相同的道理,可以画一画六边形,七边形,是一样的道理。
所以给出n边形重心公式:
x=∑i=1n−2si∗(以si为面积的三个点横坐标之和)3∑i=1n−2six=\frac{ \sum_{i=1}^{n-2}s_i*(以s_i为面积的三个点横坐标之和) }{3\sum_{i=1}^{n-2}s_i}x=3∑i=1n−2​si​∑i=1n−2​si​∗(以si​为面积的三个点横坐标之和)​
y=∑i=1n−2si∗(以si为面积的三个点纵坐标之和)3∑i=1n−2siy=\frac{ \sum_{i=1}^{n-2}s_i*(以s_i为面积的三个点纵坐标之和) }{3\sum_{i=1}^{n-2}s_i}y=3∑i=1n−2​si​∑i=1n−2​si​∗(以si​为面积的三个点纵坐标之和)​
就是酱紫,是不是很好理解0.0
Tip:计算三角形面积最好使用叉积,海伦公式会损失太多精度。给一下三角形叉积求三角形的公式。但在计算叉积时取点要注意,一定要按逆时针连图,顺时针计算的结果是负的,友情提示,不要加绝对值(会损失精度)。假如三角形有三个点A(x1, y1), B(x2, y2), C(x3, y3),公式为 :
S=(x2−x1)(y3−y1)−(y2−y1)(x3−x1)2S=\frac{(x2-x1)(y3-y1) - (y2-y1)(x3-x1)}{2}S=2(x2−x1)(y3−y1)−(y2−y1)(x3−x1)​
这个公式是要加绝对值的,但在计算重心时,别加。
贴个题目:
hdu1115 Lifting the Stone
这题就不能加绝对值…跟着公式敲就行

#include<bits/stdc++.h>
#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define lson rt<<1, l, mid
#define rson rt<<1|1, mid+1, r
#define PI 3.1415926
using namespace std;
typedef long long ll;
//叉积求面积
double getarea(double x1, double y1, double x2, double y2, double x3, double y3) {return ((x2-x1)*(y3-y1) - (y2-y1)*(x3-x1)) / 2;
}
int main() {fioint t, n; cin >> t;double x1, y1, x2, y2, x3, y3, ansx, ansy, allarea, area; while(t--) {ansx = 0; ansy = 0; allarea = 0;cin >> n;cin >> x1 >> y1 >> x2 >> y2;for(int i = 2; i < n; ++i) {cin >> x3 >> y3;area = getarea(x1, y1, x2, y2, x3, y3);cout << area << endl;allarea += area;ansx += (x1+x2+x3) * area;ansy += (y1+y2+y3) * area;x2 = x3; y2 = y3;}printf("%.2lf %.2lf\n", ansx / allarea / 3.0, ansy / allarea / 3.0);}return 0;
}

计算几何之多边形重心相关推荐

  1. POJ 3855 计算几何·多边形重心

    思路: 多边形面积->任选一个点,把多边形拆成三角,叉积一下 三角形重心->(x1+x2+x3)/3,(y1+y2+y3)/3 多边形重心公式题目中有,套一下就好了 计算多边形重心方法: ...

  2. HDOJ(1115)多边形重心

    Lifting the Stone http://acm.hdu.edu.cn/showproblem.php?pid=1115 题目描述:输入n个顶点(整数),求它们围成的多边形的重心. 算法:以一 ...

  3. hdu 1115(多边形重心)

    求多边形重心的题目大致有这么几种:  1.质量集中在顶点上      n个顶点坐标为(xi,yi),质量为mi,则重心  X = ∑( xi×mi ) / ∑mi  Y = ∑( yi×mi ) / ...

  4. HDU 1115 Lifting the Stone(求多边形重心)

    HDU 1115 大意:给你个n,有n个点,然后给你n个点的坐标,求这n个点形成的多边形的重心的坐标. 1 struct point 2 { 3 double x, y; 4 } P[1000010] ...

  5. NYOJ 3:多边形重心问题

    多边形重心问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...

  6. 不规则多边形重心求解

    文章目录 一.不规则多边形重心求解 1.1 三角形重心计算方法 1.2 三角形面积计算方法 1.3 多边形面积的计算方法 1.4 不规则多边形的重心计算方法 一.不规则多边形重心求解 1.1 三角形重 ...

  7. java计算一个多边形的重心_多边形重心问题 java

    多边形重心问题 java 看题目 点这里 题目描述: 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接),所有线段不和其他线段相交,但是可以 ...

  8. 南阳 3 多边形重心问题(数学几何)

    多边形重心问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 在某个多边形上,取n个点,这n个点顺序给出,按照给出顺序将相邻的点用直线连接, (第一个和最后一个连接), ...

  9. java计算一个多边形的重心_Java多边形重心计算

    多边形重心计算 三角形重心 顶点为a,b,c的三角形重心为x = (xa + xb + xc) / 3,y = (ya + yb + yc) / 3 多边形重心 x = (x1w1 + x2w2 + ...

  10. 【JAVA】多边形重心计算

    多边形重心计算 三角形重心 顶点为a,b,c的三角形重心为x = (xa + xb + xc) / 3,y = (ya + yb + yc) / 3 多边形重心 x = (x1w1 + x2w2 + ...

最新文章

  1. js移除某个样式_js中如何移除css样式?
  2. winform DataGrid排序、去掉第一的空白列
  3. linux实验目的能学会什么意思,Linux实验.doc
  4. pythonsort函数时间复杂度_合并排序算法——时间复杂度详解和python代码实现
  5. django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
  6. python supervisor 日志_Supervisor使用详解
  7. 性能测试测试环境与生产环境_不在生产中测试? 在生产中进行测试!
  8. 极其良心的设计导航网站
  9. colgroup标签
  10. 用计算机计算勾股定理,勾股定理电脑计算器
  11. TTW WYSIWYG Editors
  12. 2022P气瓶充装判断题及在线模拟考试
  13. C语言-小黄鸭☞循环结构while
  14. 删除win10桌面IE浏览器图标
  15. Spring事务抛出Exception异常不回滚
  16. 毕设论文word撰写:如何实现公式居中,编号右对齐?其实非常简单!
  17. openstack core components use 总结
  18. rhino android js,android rhino
  19. (原创)分词的被动语态中现在式和过去式的区别
  20. 2019最新妙味课堂jquery源码分析 jquery源码逐行分析全套

热门文章

  1. 快速跳转到行首/行尾 快捷键
  2. 高速内部总线HSIB和设备总线DB
  3. java实现pdf旋转_java生成pdf旋转_如何使用Java旋转PDF文档中的图像?
  4. Python关键字查询
  5. 使用SPSS对数据异常值进行探索分析
  6. 从0开始,如何设计一个社交电商产品
  7. java飞扬的小鸟,三国战纪,网络飞车游戏知识总结
  8. 关于IE中出现的内存不能为written问题的解决方法
  9. 36个excel技巧、50个快捷键
  10. 人脸识别面试常见题目总结