円の中に点があるかどうかの判定する方法

pointincircle.png

点A,B,Cを通る円の中に点Dは存在するかどうか?

(1)
\begin{align} D(A,B,C,D)\begin{vmatrix} x_{A} & y_{A} & x^{2}_{A} & y^{2}_{A} & 1 \\ x_{B} & y_{B} & x^{2}_{B} & y^{2}_{B} & 1 \\ x_{C} & y_{c} & x^{2}_{C} & y^{2}_{C} & 1 \\ x_{D} & y_{D} & x^{2}_{D} & y^{2}_{D} & 1 \\ \end{vmatrix} > 0 \end{align}

これには40回の計算ステップが必要で大変らしい。このdetが0以上だったら点Dは円の内部に含まれている。
円の中心と半径が与えられていない場合であっても、任意の異なる3点が与えられれば、その3点を通る円の方程式を求めることができる。

点と円の中心の距離が、円の半径より大きいかどうかで求める方法

    /**点と円の衝突判定*/
    bool hit(const glm::vec3& p, const circle& c) {
        //円の中心と点pとの距離を求める
        float distance = glm::distance(c.center,p);
        if (distance > c.radius) return false;//外側
        if (distance < c.radius) return true;//内側
    }

デモ

参考にした本

コンピュータ・ジオメトリ―計算幾何学:アルゴリズムと応用


circle point

サポートサイト Wikidot.com circlepoint