用差分方程写三角形的重心

给出三角形的三个顶点的坐标,用差分方程求其重心的坐标。具体题目描述如下图所示。
在这里插入图片描述
为了求三角形的重心,我们知道,三角形的重心坐标在中线交点,也就是中线的 1 3 \frac{1}{3} 31位置处,不妨设三角形的三个坐标分别为 ( x 1 , y 1 ) (x_1,y_1) (x1,y1) ( x 2 , y 2 ) (x_2,y_2) (x2,y2) ( x 3 , y 3 ) (x_3,y_3) (x3,y3),则重心的横坐标可以表示为
x c = x 1 + x 2 2 + 1 3 × ( x 3 − x 1 + x 2 2 ) = 1 3 ( x 1 + x 2 + x 3 ) , x_c=\frac{x_1+x_2}{2}+\frac{1}{3} \times (x_3-\frac{x_1+x_2}{2})=\frac{1}{3}(x_1+x_2+x_3), xc=2x1+x2+31×(x32x1+x2)=31(x1+x2+x3),
同理,重心的纵坐标为 y c = 1 3 ( y 1 + y 2 + y 3 ) y_c=\frac{1}{3}(y_1+y_2+y_3) yc=31(y1+y2+y3)。考虑到重心与前序三角形顶点构成的序列关系,可以推出重心迭代的差分方程为
x n + 3 = 1 3 ( x n + x n + 1 + x n + 2 ) , x_{n+3}=\frac{1}{3}(x_{n}+x_{n+1}+x_{n+2}), xn+3=31(xn+xn+1+xn+2),
y n + 3 = 1 3 ( y n + y n + 1 + y n + 2 ) . y_{n+3}=\frac{1}{3}(y_{n}+y_{n+1}+y_{n+2}). yn+3=31(yn+yn+1+yn+2).

于是,将迭代的代码表示如下,并显示画图的结果。

X、Y是初始坐标,n是迭代次数,直接在代码块里面修改就可以了,点击运行直接出结果。

% 重心坐标的原理,设已知三点的坐标分别为(x1,y1),(x2,y2),(x3,y3),那么重心坐标为
% x=(x1+x2+x3)/3, y=(y1+y2+y3)/3,由此可以推断出重心坐标的差分公式为
% x(n+3)=(x(n)+x(n+1)+x(n+2))/3;
% y(n+3)=(y(n)+y(n+1)+y(n+2))/3;

X= [1 2 3];
Y= [4 7 6];
plot([X X(1)],[Y Y(1)]), hold on
S = Centre(X, Y, 8)

%% 主程序如下
function S = Centre(X, Y, n)
% X, Y为初始三个点的横纵坐标,n为需要求解的迭代次数,S保存所有重心坐标
x(1:3)=X;
y(1:3)=Y;
S=[];
for i=1:n
    x(i+3)=(x(i+2)+x(i+1)+x(i))/3;
    y(i+3)=(y(i+2)+y(i+1)+y(i))/3;
    S=[S;[x(i+3) y(i+3)]];
    line([x(i+3) x(i+2)],[y(i+3) y(i+2)]); hold on
    line([x(i+3) x(i+1)],[y(i+3) y(i+1)]); hold on
end
end

当迭代8次时,输出的结果如下图。

在这里插入图片描述
在这里插入图片描述

不同坐标分布的规律探寻:

close all
clear all
clc
% 重心坐标的原理,设已知三点的坐标分别为(x1,y1),(x2,y2),(x3,y3),那么重心坐标为
% x=(x1+x2+x3)/3, y=(y1+y2+y3)/3,由此可以推断出重心坐标的差分公式为
% x(n+3)=(x(n)+x(n+1)+x(n+2))/3;
% y(n+3)=(y(n)+y(n+1)+y(n+2))/3;
tic

a= [4 0 5];
b= [3 0 0];
for i=1:3
    for j=1:2
        X(1)=a(i);   Y(1)=b(i);
        k = i+j-3*(i+j>3);
        X(2)=a(k);   Y(2)=b(k);
        k = k+j-3*(k+j>3);
        X(3)=a(k);   Y(3)=b(k);
        
        subplot(2,3,i+(j-1)*3)
        plot([X X(1)],[Y Y(1)]), hold on
        S = Centre(X, Y, 8);
    end
end
toc
%% 主程序如下
function S = Centre(X, Y, n)
% X, Y为初始三个点的横纵坐标,n为需要求解的迭代次数,S保存所有重心坐标
x(1:3)=X;
y(1:3)=Y;
S=[];
for i=1:n
    x(i+3)=(x(i+2)+x(i+1)+x(i))/3;
    y(i+3)=(y(i+2)+y(i+1)+y(i))/3;
    S=[S;[x(i+3) y(i+3)]];
    line([x(i+3) x(i+2)],[y(i+3) y(i+2)]); hold on
    line([x(i+3) x(i+1)],[y(i+3) y(i+1)]); hold on
end
end

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Haleine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值