From a point where do the lines touch a circle tangentially?. The loldrup solution may provide some guidance and alternate method. I will elaborate a more reference frame modification geometric solution utilizing Matlab specific functions, rotation matrix, and translation matrix.
Given point(px,py) and circle [cx,cy,R] return the circle points [x3 y3;x4 y4] where lines thru the point are tangential to the circle. The line ([px,py],[x3,y3]) is tangential to circle [cx,cy,R] at circle point [x3,y3]. D>R.
The below figure is created based upon h=P=distance([cx,cy],[px,py])/2=D/2, translating (cx,cy) to (0,0), and rotating (px,py) to be on the Y-axis. From this manipulation two right triangles are apparent: [X,Y,R] and [X,h-Y,P]. Subtracting and simplifying these triangles leads to Y and two X values after substituting back into R^2=X^+Y^2 equation.
P^2=X^2+(h-Y)^2 and R^2=X^2+Y^2 after subtraction gives R^2-P^2=Y^2-(h-Y)^2 = Y^2-h^2+2hY-Y^2=2hY-h^2 thus
Y=(R^2-P^2+h^2)/(2h) =(R^2-P^2+P^2)/(2P)=R^2/(2P)=R^2/D
X=+/- (R^2-Y^2)^.5=+/- (R^2-(R^2/(2P))^2)^0.5=+/- R*(1-(R/D)^2)^0.5
The trick is to now un-rotate and translate this solution matrix using t=atan2(dx,dy), [cos(t) -sin(t);sin(t) cos(t)] and [cx cy]
This figure shows the point (px,py) rotated onto the Y-axis at position 2P. The circle (cx,cy) has been shifted to the origin with radius R. The green line shows a tangent at (x,y) from (px,py). A second tangent point is at (-x.y). D=2*P
Solution Stats
Solution Comments
Show comments
Loading...
Problem Recent Solvers5
Suggested Problems
-
Which values occur exactly three times?
5236 Solvers
-
The Hitchhiker's Guide to MATLAB
3404 Solvers
-
556 Solvers
-
How many days does the cat take to climb out of the hole?
82 Solvers
-
Give me Hamming on five, hold the mayo
55 Solvers
More from this Author308
Problem Tags
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!