[【演算法】 過圓外一點,求該點和圓相切的兩個切點座標]C#實現
阿新 • • 發佈:2021-01-20
如圖,點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);