希望能给出Matlab具体的代码

img


设出三角形初始A1、A2、A3的点的三个坐标,由中心坐标进行迭代计算,这个用算法写一个循环应该就能写出来,但是要是用差分方程直接给出各量之间的通项公式,我差分方程没太学明白,所以需要大家的帮助

我理解的意思是编写一个函数传入三角形顶点坐标和所需要求的重心个数,下面是我的代码

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

img


第一步:熟悉三角形原理,我使用的原理之一就是:重心到顶点的距离与重心到对边中点的距离之比为21

第二部:分析

求三角形的重心(中心点)
设三角形ABC三个顶点的横坐标分别是x1、x2、x3,
则BC中点A’横坐标是 (x2+x3)/2,
连结AA’,则重心O内分AA’,AO:OA’=21,(重心到顶点的距离与重心到对边中点的距离之比为21)
则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);
    }
}