我理解的意思是编写一个函数传入三角形顶点坐标和所需要求的重心个数,下面是我的代码
function centerpoint(A,n)
%A,B,C为三角形三个顶点坐标
%输入一个矩阵A,三行三列,每行表示一个顶点的x,y,z坐标
%输入n表示需要输出的重心个数
for i = 1:n
x = [sum(A(:,1))/3,sum(A(:,2))/3,sum(A(:,3))/3];
fprintf('第%d 个重心坐标:\n',i);
disp(x)
%把表示三角形顶点的矩阵a进行调整
A(1,:)=A(2,:);
A(2,:)=A(3,:);
A(3,:)=x;
end
第一步:熟悉三角形原理,我使用的原理之一就是:重心到顶点的距离与重心到对边中点的距离之比为2:1
第二部:分析
求三角形的重心(中心点)
设三角形ABC三个顶点的横坐标分别是x1、x2、x3,
则BC中点A’横坐标是 (x2+x3)/2,
连结AA’,则重心O内分AA’,AO:OA’=2:1,(重心到顶点的距离与重心到对边中点的距离之比为2:1)
则O点的横坐标为:[x1+2(x2+x3)/2]/(1+2)=(x1+x2+x3)/3,
同理可求重心O的纵坐标为(y1+y2+y3)/3。*
第三步:上代码
package parse;
//求三角形的重心(中心点)
//设三角形ABC三个顶点的横坐标分别是x1、x2、x3,
//则BC中点A'横坐标是 (x2+x3)/2,
//连结AA',则重心O内分AA',AO:OA'=2:1,(重心到顶点的距离与重心到对边中点的距离之比为2:1)
//则O点的横坐标为:[x1+2*(x2+x3)/2]/(1+2)=(x1+x2+x3)/3,
//同理可求重心O的纵坐标为(y1+y2+y3)/3。
public class GeoCoordinate {
public static void main(String[] args) {
// [[50497.01855260307, 25630.73895278241, 0],[50823.956335874595, 25630.739007797245, 0]]
// [[50497.01855260307, 25630.73895278241, 0],[50660.487554713705, 25330.73898028984, 0]]
// [[50660.487554713705, 25330.73898028984, 0],[50823.956335874595, 25630.739007797245, 0]]
double a1 = 50497.01855260307;
double a2 = 50823.956335874595;
double a3 = 50660.487554713705;
double b1 = 25630.73895278241;
double b2 = 25330.73898028984;
double b3 = 25630.739007797245;
double x = (a1+a2+a3)/3;
double y = (b1+b2+b3)/3;
System.out.println("x: "+x+" y: "+y);
}
}