1
0

More than 3 years have passed since last update.

楕円と点の当たり判定(JavaScript)

Posted at

楕円とは、「ある二点からの距離の和が常に一定である点の集合」である。
この「ある二点」を焦点と呼び、「一定」の値は長軸(縦横のうち長い方の幅)の長さとなる。
即ち、横に長い楕円(回転はしない)に限れば、中心の座標、焦点同士の距離、長軸の長さ、という3つの情報から楕円は一意に定まる。

そんな楕円に対して、ある点から当たり判定をけしかけたい。
やることは単純で、点と二焦点との距離の和が横幅より小さければ点は内部にあり、大きければ点は外部にある。

script.js
//点(x1,y1)が楕円[中心(x2,y2), 焦点から中心までの距離f, 横幅w]の内部にあるかどうかを判定する関数
function detectEllipseCollision(x1, y1, x2, y2, f, w){
    if(hypo(x1,y1,x2+f,y2) + hypo(x1,y1,x2-f,y2) <= w){
        return true;
    } else {
        return false;
    }
}

function hypo(x1, y1, x2, y2){//二点(x1,y1), (x2,y2)の距離を返す関数
    return Math.pow(Math.pow(x1-x2,2)+Math.pow(y1-y2,2), 1/2);
}

こいつをなんやかんや上手いことやれば、楕円と円、楕円と楕円、回転楕円における当たり判定も実装できる(はず)。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0