c语言求解三角形的重心,计算几个三角形的重心
首先,您必须确定您实际想要计算的重心。很明显,当三角形相交(并且重叠区域不应该被计数两次)时,则不计算三角形的重心,而是计算它们交叉区域的重心。
幸运的是,这样一个相交区域可以很容易地用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语言求解三角形的重心,计算几个三角形的重心相关推荐
- c语言求解三角形的重心,三角形的重心怎么求
三角形重心是三角形三边中线的交点. 根据重心的性质,三边中线必交于一点. 所以作三角形任意两边的中线,其交点就是此三角形的重心. 1.重心到顶点的距离与重心到对边中点的距离之比为2:1. 证明一 三角 ...
- c语言正方形和三角形面积,【c语言】计算长方形,三角形和圆形的面积,根据用户的选择求不同形状的面积。...
推荐答案 墨然lin 2015.05.20 采纳率:44% 等级:13 已帮助:801人 import java.util.Scanner; public class Test { public ...
- C语言判断三角形类型并计算面积
这里将介绍如何根据三角形的三条边判断三角形类型,并输出其类型与面积的方法. 算法思想 首先输入三条边的长度,先判断任意两边之和是否大于第三边,若小于,则不能构成三角形. 接着依次判断下列条件: 三角形 ...
- 计算机编程方程求解的步骤,计算机编程c语言求解线性代数方程组
计算机编程c语言求解线性代数方程组 (18页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 安徽三联学院本科专业学年论文题目:线性方程组求解 ...
- 分数序数之和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.首先弄清楚这组分数序列的规律:从 ...
- 用c语言求解n阶线性矩阵方程组,用C语言求解N阶线性矩阵方程Axb简单解法.docx
用C语言求解N阶线性矩阵方程Axb简单解法 用C语言求解N阶线性矩阵方程Ax=b的简单解法一.描述问题:题目:求解线性方程组Ax=b,写成函数.其中,A为n×n的N阶矩阵,x为需要求解的n元未知数组成 ...
- 有一分数序列求前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.首先弄清楚这组分数序列的规律:从 ...
- 知识点 - 多边形的重心、核、三角形的心
知识点 - 多边形的重心.核.三角形的心 解决问题类型: 多边形的重心. 三角形的内.外.垂心. 三角形的费马点(到三点和距离最小) 复杂度与代码: O(n)n为点数 多边形重心 即过这点的直线平分该 ...
- c语言第五章课后答案冯山,C语言 四川师范大学 信息与计算科学 冯山实验五.doc...
C语言 四川师范大学 信息与计算科学 冯山实验五.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...
最新文章
- 写了 5 年 Java,这些坑还是没躲过……
- LeetCode-461. 汉明距离(python3)
- Vue Nuxtjs Cannot set property 'render' of undefined解决方法
- java 不同包子类 覆盖_Java中不同方法的覆盖方法
- 飞鸽传书有多少用户?
- 输入一颗二元树,从上向下按层打印树的每个节点,同一层中,按照从左到右的顺序打印。...
- CALayer 4 详解 -----转自李明杰
- UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 24: invalid start byte
- 从DevOps到Cloud Native,应用上云姿势全解锁 1
- (转)IE劫持原理 BHO
- 软件企业CMMI认证需要什么条件?
- WPS2000的目录提取(转)
- IIR滤波器的FPGA实现
- 怀念中国雅虎:技术文化和惨淡命运,互联网营销
- 劲爆!群晖docker视频
- markdown中划线
- python有向图遍历_用Networkx进行有向图遍历
- 我在 GitHub 上找到了这些游戏项目,刺激!
- 使用脚本更改计算机名
- 风火家人:避风港湾;火泽暌:求同存异