内切圆计算


一、问题描述

在上一篇文章介绍了外接圆的计算链接: link,内切圆的计算和其相似。都可以根据定义写出相应的等式,构造矩阵然后求解。内切圆是指在三角形内部,半径最大,与3条边都相切的圆。

二、已知条件

已知三角形的三个顶点, v 0 , v 1 , v 2 v_0,v_1,v_2 v0,v1,v2,求圆心c,半径r
在这里插入图片描述

3.求解

n i n_i ni为三条边的法向量。
在这里插入图片描述

4. code

clc;
close all;
clear;


rng default;
d = rand(3,2);
p1 = d(1,:);
p2 = d(2,:);
p3 = d(3,:);
[c, r] = calCircle(p1, p2, p3);

showGraph(p1, p2, p3, c, r);





function [c, r] = calCircle(p1, p2, p3)
    v1 = p2 - p1;
    v2 = p3 - p1;
    if(v1(1)*v2(2)-v1(2)*v2(1)<0)
       pt = p2;
       p2 = p3;
       p3 = pt;
    end

   v1 = normalize(p2 - p1,'norm');
   v2 = normalize(p3 - p2,'norm');
   v3 = normalize(p1 - p3,'norm');
    n = [v1(2) -v1(1); v2(2) -v2(1); v3(2) -v3(1)];
    
    A = [n, -1*ones(size(n,1), 1)];
    B = dot(n,[p1; p2; p3],2);
    x = A\B;
    c = x(1:end-1)';
    r = x(end);
end

function showGraph(p1, p2, p3, c, r)
    t = linspace(0,2*pi,100);
    x = c + [r*sin(t'), r*cos(t')];
    figure;
    pt = [p1;p2;p3;p1];
    plot(pt(:,1), pt(:,2));
    hold on
    p = [p1;p2;p3];
    scatter(p(:,1), p(:,2));
    hold on
    plot(x(:,1), x(:,2));
    hold on
    scatter(c(1), c(2))
    axis equal
end

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值