首先,您必须确定您实际想要计算的重心。很明显,当三角形相交(并且重叠区域不应该被计数两次)时,则不计算三角形的重心,而是计算它们交叉区域的重心。

幸运的是,这样一个相交区域可以很容易地用Area类来计算。根据一条评论,你已经有一个描述这个区域的Area。

因此计算此区域重心的一种方法是计算Area所有边界点的平均值。

请注意,这只适用于Area没有孔。

否则,您必须计算Area的面积。

这里是一个可能的实现:

import java.awt.Shape;

import java.awt.geom.Area;

import java.awt.geom.Path2D;

import java.awt.geom.PathIterator;

import java.awt.geom.Point2D;

import java.util.ArrayList;

import java.util.Collection;

import java.util.List;

public class CenterOfGravity

{

public static void main(String[] args)

{

Path2D p0 = new Path2D.Double();

p0.moveTo(100, 100);

p0.lineTo(200, 100);

p0.lineTo(150, 50);

p0.closePath();

Path2D p1 = new Path2D.Double();

p1.moveTo(150, 100);

p1.lineTo(250, 100);

p1.lineTo(200, 50);

p1.closePath();

Area a = new Area();

a.add(new Area(p0));

a.intersect(new Area(p1));

Point2D cog = computeCenterOfGravity(a);

System.out.println(cog);

}

private static Point2D computeCenterOfGravity(Shape shape)

{

return computeAverage(computePoints(shape, 1.0));

}

private static Point2D computeAverage(

Collection extends Point2D> points)

{

double x = 0;

double y = 0;

for (Point2D point : points)

{

x += point.getX();

y += point.getY();

}

if (!points.isEmpty())

{

x /= points.size();

y /= points.size();

}

return new Point2D.Double(x, y);

}

public static List computePoints(

Shape shape, double flatness)

{

List result = new ArrayList();

PathIterator pi = shape.getPathIterator(null, flatness);

double[] coords = new double[6];

while (!pi.isDone())

{

int segment = pi.currentSegment(coords);

switch (segment)

{

case PathIterator.SEG_MOVETO:

case PathIterator.SEG_LINETO:

result.add(new Point2D.Double(coords[0], coords[1]));

break;

case PathIterator.SEG_CLOSE:

break;

case PathIterator.SEG_QUADTO:

case PathIterator.SEG_CUBICTO:

default:

throw new AssertionError(

"Invalid segment in flattened path!");

}

pi.next();

}

return result;

}

}

c语言求解三角形的重心,计算几个三角形的重心相关推荐

  1. c语言求解三角形的重心,三角形的重心怎么求

    三角形重心是三角形三边中线的交点. 根据重心的性质,三边中线必交于一点. 所以作三角形任意两边的中线,其交点就是此三角形的重心. 1.重心到顶点的距离与重心到对边中点的距离之比为2:1. 证明一 三角 ...

  2. c语言正方形和三角形面积,【c语言】计算长方形,三角形和圆形的面积,根据用户的选择求不同形状的面积。...

    推荐答案 墨然lin 2015.05.20 采纳率:44%    等级:13 已帮助:801人 import java.util.Scanner; public class Test { public ...

  3. C语言判断三角形类型并计算面积

    这里将介绍如何根据三角形的三条边判断三角形类型,并输出其类型与面积的方法. 算法思想 首先输入三条边的长度,先判断任意两边之和是否大于第三边,若小于,则不能构成三角形. 接着依次判断下列条件: 三角形 ...

  4. 计算机编程方程求解的步骤,计算机编程c语言求解线性代数方程组

    计算机编程c语言求解线性代数方程组 (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 安徽三联学院本科专业学年论文题目:线性方程组求解 ...

  5. 分数序数之和c语言,用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求这个数列的前20项之和....

    用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,-求这个数列的... 3个答案  提问时间: 2010-12-22  2个赞 回答:1.首先弄清楚这组分数序列的规律:从 ...

  6. 用c语言求解n阶线性矩阵方程组,用C语言求解N阶线性矩阵方程Axb简单解法.docx

    用C语言求解N阶线性矩阵方程Axb简单解法 用C语言求解N阶线性矩阵方程Ax=b的简单解法一.描述问题:题目:求解线性方程组Ax=b,写成函数.其中,A为n×n的N阶矩阵,x为需要求解的n元未知数组成 ...

  7. 有一分数序列求前20项和答案c语言,用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,…求这个数列的前20项之和....

    用c语言求解:有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,-求这个数列的... 3个答案  提问时间: 2010-12-22  2个赞 回答:1.首先弄清楚这组分数序列的规律:从 ...

  8. 知识点 - 多边形的重心、核、三角形的心

    知识点 - 多边形的重心.核.三角形的心 解决问题类型: 多边形的重心. 三角形的内.外.垂心. 三角形的费马点(到三点和距离最小) 复杂度与代码: O(n)n为点数 多边形重心 即过这点的直线平分该 ...

  9. c语言第五章课后答案冯山,C语言 四川师范大学 信息与计算科学 冯山实验五.doc...

    C语言 四川师范大学 信息与计算科学 冯山实验五.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

最新文章

  1. 写了 5 年 Java,这些坑还是没躲过……
  2. LeetCode-461. 汉明距离(python3)
  3. Vue Nuxtjs Cannot set property 'render' of undefined解决方法
  4. java 不同包子类 覆盖_Java中不同方法的覆盖方法
  5. 飞鸽传书有多少用户?
  6. 输入一颗二元树,从上向下按层打印树的每个节点,同一层中,按照从左到右的顺序打印。...
  7. CALayer 4 详解 -----转自李明杰
  8. UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 24: invalid start byte
  9. 从DevOps到Cloud Native,应用上云姿势全解锁 1
  10. (转)IE劫持原理 BHO
  11. 软件企业CMMI认证需要什么条件?
  12. WPS2000的目录提取(转)
  13. IIR滤波器的FPGA实现
  14. 怀念中国雅虎:技术文化和惨淡命运,互联网营销
  15. 劲爆!群晖docker视频
  16. markdown中划线
  17. python有向图遍历_用Networkx进行有向图遍历
  18. 我在 GitHub 上找到了这些游戏项目,刺激!
  19. 使用脚本更改计算机名
  20. 风火家人:避风港湾;火泽暌:求同存异

热门文章

  1. Linux中进程的退出
  2. 13个风格独特的关于(About)页面设计
  3. Mapreduce 跑的慢的原因
  4. 软件项目测试流程的规划
  5. 打破边界,边缘计算有何应用场景?
  6. USACO2013 island travels
  7. matlab代码建立不允许缺货,允许缺货的经济订货批量模型.doc
  8. 微信支付平台设置及如何获取微信支付所需参数
  9. 高精速撸project A*B
  10. HDMI光纤线,英文称呼:hdmi AOC Cable,又被称为有源光缆。