matlab实现三角形的外接圆与内接圆
程序员文章站
2022-05-22 13:08:26
...
三角形的内接圆 算法原理:
1.三角形角平分线的交点就是三角形内切圆的圆心。
2.(单位向量相加后的向量即为角平分线向量)把两个向量A、B分别归一化(就是分别除以自己的长度),得到C = A/|A| ,D = B/|B| ,然后 C + D 就是原来 A和B的角平分线的向量,用该向量易得角平分线的斜率。
3.构建出角平分线方程y=kx+b后,求交点,求出内切圆的圆心。
%三角形的内接圆
clear all;clc;
p=rand(3,2);
%找角平分线向量
v12=(p(2,:)-p(1,:))/norm(p(2,:)-p(1,:));
v13=(p(3,:)-p(1,:))/norm(p(3,:)-p(1,:));
v21=(p(1,:)-p(2,:))/norm(p(1,:)-p(2,:));
v23=(p(3,:)-p(2,:))/norm(p(3,:)-p(2,:));
v1=v12+v13;
k1=v1(2)/v1(1);
b1=p(1,2)-k1*p(1,1);%一条角平分线
v2=v21+v23;%另一条角平分线
k2=v2(2)/v2(1);
b2=p(2,2)-k2*p(2,1);
%求两条角平分线的交点 圆心
x0=-(b1-b2)/(k1-k2);
y0=-(-b2*k1+b1*k2)/(k1-k2);
%求圆半径
k=(p(2,2)-p(1,2))/(p(2,1)-p(1,1));
b=p(2,2)-k*p(2,1);
r=(k*x0-y0+b)/sqrt(k^2+1);
%画图
hold on;
plot(p(:,1),p(:,2),'r');
p=circshift(p,1);
plot(p(:,1),p(:,2));
theta=0:0.01:2*pi;
x=x0+r*cos(theta);
y=y0+r*sin(theta);
plot(x,y,'-',x0,y0,'r.');
axis equal
三角形外切圆算法原理:
1.垂直平分线的交点是内切圆的圆心;
2.中点与斜率确定垂直平分线方程
clear all;close all;clc;
%三角形外接圆
clear;clc;
p=rand(3,2);
%求垂直平分线
center1=(p(1,:)+p(2,:))/2;%中点
center2=(p(2,:)+p(3,:))/2;
k1=-1/((p(2,2)-p(1,2))/(p(2,1)-p(1,1)));%斜率
k2=-1/((p(3,2)-p(2,2))/(p(3,1)-p(2,1)));
b1=center1(2)-k1*center1(1);%垂直平分线fang
b2=center2(2)-k2*center2(1);
%求交点
x0=-(b1-b2)/(k1-k2) %求两直线交点
y0=-(-b2*k1+b1*k2)/(k1-k2)
%求半径
r=sqrt((x0-p(1,1))^2+(y0-p(1,2))^2)
hold on;
plot(p(:,1),p(:,2),'r');
p=circshift(p,1);%画三角形的
plot(p(:,1),p(:,2),'b');
thea=0:0.01:2*pi;
x=x0+r*cos(thea);
y=y0+r*sin(thea);
plot(x,y,'-',x0,y0,'r');
axis equal;
推荐阅读