欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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后,求交点,求出内切圆的圆心。

matlab实现三角形的外接圆与内接圆


%三角形的内接圆
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


三角形外切圆算法原理:

matlab实现三角形的外接圆与内接圆

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;