点和圆相切的两个切点坐标

【算法】 过圆外一点,求该点和圆相切的两个切点坐标

如图,点A为圆外点,求过A和圆相切的两个切点坐标,这个坐标怎么算?avatar

最佳答案:
很简单我就不画图了,你可以自己画一下
假设过圆外一点A的一条直线与圆O相切于点B
要求点B的坐标,只需要点O坐标+向量OB即可
问题在于向量OB的方向不知道
但是因为直角三角形,我们知道 OB / OA = cos 角AOB
也就是说知道角AOB的值,拿向量OA的单位向量旋转一下再乘以半径r就得到了向量OB
这样就算是完成了

c#实现:

var a = new Vector2(1, 2);
var o = new Vector2(5, 1);
var ao = o - a;
var r = 2;
var cosAOB = r / ao.Length();
var radianAOB = (float)Math.Acos(cosAOB);
var a1 = Vector2.Normalize(ao);
var ob1 = Vector2.Transform(-a1, Matrix3x2.CreateRotation(-radianAOB)) * r;
var b = o + ob1;
Console.WriteLine(b);

var ob2 = Vector2.Transform(-a1, Matrix3x2.CreateRotation(radianAOB)) * r;
var b2 = o + ob2;
Console.WriteLine(b2);

posted @ 2021-01-20 14:00  slowstart  阅读(1689)  评论(0编辑  收藏  举报