circle inside triangle tangent points
조회 수: 12 (최근 30일)
이전 댓글 표시
Hello !
I have a problem and have not gotten anywhere.
I have to find the centerpoint of the circle and tangent points of the circle
Looking for any sugestions. Prefer not to use solve, but its acceptable.
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/809249/image.png)
Points of the triangle are :
ax=1,ay=1;
bx=5,by=2;
cx=4,cy=4;
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Only calculations ive gotten so far are these below. BUT they are very wrong or atleast i cant figure out how to solve this problem.
alfa=atand((ay-by)/(ax-bx))
beta=atand((ay-cy)/(ax-cx))
AC = sqrt((ax-cx)^2+(ay-cy)^2); %AC
AB = sqrt((ax-bx)^2+(ay-by)^2); %CB
CB = sqrt((bx-cx)^2+(by-cy)^2); %CB
s = (AB+AC+CB)/2
A = sqrt(s*(s-AB)*(s-AC)*(s-CB))
R = 2*(A)/(AB+AC+CB)
Fx = (bx+ax)/2; ,Fy = (by +ay)/2;
Ex = (cx+ax)/2; ,Ey = (cy +ay)/2;
Tx = (bx+cx)/2; ,Ty = (by +cy)/2;
theta=atand((ay-Ty)/(ax-Tx))
delta = ((ay-Ty)/(ax-Tx))
a=cosd(theta);
b=-cosd(delta);
c=sind(theta);
d=-sind(delta);
e=Tx-ax;
f=Ty-ay;
r=(d*e-b*f)/(a*d-b*c);
t=(a*f-c*e)/(a*d-b*c);
Px=ax+R*cosd(theta);
Py=ay+R*sind(theta);
Thank you for any help !
댓글 수: 0
채택된 답변
Yongjian Feng
2021년 11월 22일
This is more like a math problem, is it?
Can you compute two of the bisectors? They intercept right at the center of the circle, right?
댓글 수: 4
Yongjian Feng
2021년 11월 23일
편집: Yongjian Feng
2021년 11월 23일
Just basic math concepts:
ax=1;ay=1;
bx=5;by=2;
cx=4;cy=4;
% plot the triabgle
plot([ax bx cx ax], [ay by cy ay]);
hold on
ab = distance([ax ay], [bx by]);
ac = distance([ax ay], [cx cy]);
bc = distance([bx by], [cx cy]);
% d on bc. bisector theorem
dx = cx + (bx-cx)*ac/(ac + ab);
dy = cy + (by-cy)*ac/(ac + ab);
% e on ab. bisector theorem
ex = ax + (bx-ax)*ac/(ac+bc);
ey = ay + (by-ay)*ac/(ac+bc);
% ad and ce intercept at the center of the circle
[ox, oy] = polyxpoly([ax dx], [ay dy], [cx ex], [cy ey]);
% radius is the shortest distance from o to bc
radius = point_to_line([ox oy 0], [bx by 0], [cx cy 0]);
% G is O's projection on bc, and is the tangent point
[gx, gy] = point_project([ox oy], [cx cy], [bx by]);
% H is O's projection on ab, and is the tangent point
[hx, hy] = point_project([ox oy], [ax ay], [bx by]);
% I is O's projection on ac, and is the tangent point
[ix, iy] = point_project([ox oy], [ax ay], [cx cy]);
% now draw everything
plot([ax dx], [ay dy]);
plot([cx ex], [cy ey]);
% draw the circle
p = nsidedpoly(300, 'center', [ox oy], 'Radius', radius);
plot(p, 'FaceColor', 'r');
% three vertices of the triangle
text(ax, ay, 'A');
text(bx, by, 'B');
text(cx, cy, 'C');
% Note D and E are NOT the tangent points. They are the intercept of
% bisector
text(dx, dy, 'D');
text(ex, ey, 'E');
% O is the center of the circle
text(ox, oy, 'O');
% G, H, I are the tangent points.
text(gx, gy, 'G');
text(hx, hy, 'H');
text(ix, iy, 'I')
function dist = distance(p1, p2)
dist = sqrt((p1(1) - p2(1))^2+(p1(2) - p2(2))^2);
end
% compute the shortest distance from a point to a line
% https://www.mathworks.com/matlabcentral/answers/95608-is-there-a-function-in-matlab-that-calculates-the-shortest-distance-from-a-point-to-a-line
function d = point_to_line(pt, v1, v2)
a = v1 - v2;
b = pt - v2;
d = norm(cross(a,b)) / norm(a);
end
% project point c on to line ab. If d is the projection point on ab, then
% the distance cd must be the min.
function [dx, dy] =point_project(c, a, b)
ab_sq = (a(1) - b(1))^2 + (a(2) - b(2))^2;
alpha = -((a(2)-c(2))*(b(2)-a(2))+(a(1)-c(1))*(b(1)-a(1)))/ab_sq;
dx = a(1) + alpha*(b(1)-a(1));
dy = a(2) + alpha*(b(2)-a(2));
end
추가 답변 (1개)
Matt J
2021년 11월 23일
You can find the circle using incircle in this FEX submission
Once you've done that, the computation of the tangent points is easy.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Special Functions에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!