円と直線の交点を求める
JAVA(コンピュータ言語)で求める方法です。以下の順序で交点を求めます。
①直線と円の中心点との距離aを求める。
②a > 円の半径r → 交点なし
a = r → 一つの交点
a < r → 2つの交点
③円の中心から直線へ垂点を下ろす
交点が1つなら、垂点が交点になる
④垂点から交点までの距離bを求める
⑤垂点から直線状を±b移動した位置を計算し、交点とする
円と直線の交点を求めるJAVAメソッド
こんな感じで作りました。
円の中心を表わすPointクラスと半径、直線を表わすLineクラスを入れ、交点を表わすPoint配列を返します。
交点がない場合はPoint[]はnull。
交点が1つの場合、半径と距離aの差が1/100以下の時に1つと判定しています。
いろいろなメソッドを呼び出していますが、ほかのページでこれらを紹介します。
public tomojavalib.p2cad.Point[] enSenKouten( tomojavalib.p2cad.Point p, double r, Line l)
{
tomojavalib.p2cad.Point[] kouten = null;
//円中心と線の距離aをもとめる
double a = senTenKyori( l , p );
//円の半径より大きければ交点なし、=なら交点1つ、小さければ交点2つ
if( r < a ){ return null; }
//中心から線へ垂点を下ろす
tomojavalib.p2cad.Point suiten = suiten( l , p );
//交点1つなら垂点が交点、
if((int)(r*100.)==(int)(a*100.)){ kouten = new tomojavalib.p2cad.Point[1] ; kouten[0]= suiten ; return kouten; }
//rとaからもう1辺のbを求める
double b = Math.sqrt( r*r - a*a);
//垂点から直線上を±b行ったところが交点
kouten = new tomojavalib.p2cad.Point[2];
kouten[0] = new tomojavalib.p2cad.Point();
kouten[1] = new tomojavalib.p2cad.Point();
kouten[0] = pointLengthAngle( suiten , b , l.getAngle() );
kouten[1] = pointLengthAngle( suiten , b , l.getAngle()-180. );
return kouten;
}
最終更新日: 2014-03-29 08:25:38