交点ばかりですが、円と直線の交点を計算してみようと思います。
直線「ax+by+c=0」と半径r、中心(x,y)の円の交点は、中心から直線へ下ろした垂線と、垂線からθの位置の円周上にあります。垂線は、直線と点の距離を求める過程で求めることができます。
θは、逆余弦、ActionScriptで言うところのMath.acosを使って求めて、後は適当に。
if( v.length>r ){
//距離が半径より大きい場合、交点なし
return [];
}else if( v.length<r ){
//交点が2つ
var drad:Number;
var irad:Number;
if( dv.length>0 ){
//距離ベクトルの角度
drad = Math.atan2( v.y, v.x );
//距離ベクトルから交点の角度
irad = Math.acos( v.length/r );
}else{
drad = Math.atan2( b, a );
irad = Math.PI/2;
}
return [ new Point( x + r*Math.cos(drad+irad), y + r*Math.sin(drad+irad) ),
new Point( x + r*Math.cos(drad-irad), y + r*Math.sin(drad-irad) ) ];
}else{
//接線
v.offset( x, y );
return [ v ];
}
こんな感じになります。