三角形的內接圓 演算法原理:
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;
三角形的外接圓 計算幾何
給定三角形三點座標 三點不會在同一直線 和乙個點 x,y 要你判斷點 x,y 是否在三角形外接圓之外。若在圓外,輸出 accepted 若在圓上或圓內,則輸出 rejected sample input 3 2 0 0 2 2 0 2 2 2 0 0 2 2 0 0 2 2 0 0 2 2 0 1 ...
圓與三角形(圓與三角形是否相交)
給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試資料。4 1 三個數,前兩個數為圓心的座標xc,yc,第3個數為圓的半徑r。3000 xc,yc ...
圓與三角形
1298 圓與三角形 基準時間限制 1 秒 空間限制 131072 kb 分值 0 難度 基礎題 給出圓的圓心和半徑,以及三角形的三個頂點,問圓同三角形是否相交。相交輸出 yes 否則輸出 no 三角形的面積大於0 第1行 乙個數t,表示輸入的測試數量 1 t 10000 之後每4行用來描述一組測試...