| INDEX |

交点ばかりですが、円と直線の交点を計算してみようと思います。

直線「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 ];
}

こんな感じになります。

>> source

| INDEX |