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

    xiaoxiao2021-03-25  125

    三角形的内接圆 算法原理:

    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;

     

    转载请注明原文地址: https://ju.6miu.com/read-17112.html

    最新回复(0)