半径r、中心(x,y)の円の接線を求めてみようと思います。
接線を「ax+by+c=0」とすると、直線の傾きを決めるベクトルv(a,b)は、角度θのとき、
a = Math.cos(θ) b = Math.sin(θ)
となります。
一方、任意の点pから直線へ下ろした垂線のベクトルの長さは、
-( a*p.x + b*p.y + c )/v.length
で求めることができました。
今回の場合、中心(x,y)から接線への長さがrになり、v.lengthは1になります。
r = -(a*x + b*y + c) ↓ c = -a*x - b*y - r
まとめると、
/**
* 円の接線
* @param 円の中心 x
* @param 円の中心 y
* @param 円の半径 r
* @param 角度
*/
function tangentLineOnCircle( x:Number, y:Number, r:Number, t:Number ):Line{
var a:Number = Math.cos(t);
var b:Number = Math.sin(t);
var c:Number = -a*x - b*y - r;
return new Line(a,b,c);
}