1. 程式人生 > 實用技巧 >[【演算法】 過圓外一點,求該點和圓相切的兩個切點座標]C#實現

[【演算法】 過圓外一點,求該點和圓相切的兩個切點座標]C#實現

【演算法】 過圓外一點,求該點和圓相切的兩個切點座標

如圖,點A為圓外點,求過A和圓相切的兩個切點座標,這個座標怎麼算?

最佳答案:
很簡單我就不畫圖了,你可以自己畫一下
假設過圓外一點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 radianOAB = (float)Math.Acos(cosAOB);
var a1 = Vector2.Normalize(ao);
var ob1 = Vector2.Transform(-a1, Matrix3x2.CreateRotation(-radianOAB)) * r;
var b = o + ob1;
Console.WriteLine(b);

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