うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】円や球の内側に指定した点があるかどうか判定する

円の公式を利用して、点が円の内側かどうかを判定する

f:id:hacchi_man:20210126003718p:plain

球の場合は以下の式で判定できる

f:id:hacchi_man:20210126003534p:plain

using UnityEngine;
 
public class MathUtil
{
    /// <summary>
    /// 球の内側か
    /// (x - a)^2 + (y - b)^2 + (z - c)^2 <= r^2
    /// </summary>
    /// <param name="p">球の中心座標</param>
    /// <param name="r">半径</param>
    /// <param name="c">対象となる点</param>
    /// <returns></returns>
    public static bool InSphere(Vector3 p, float r, Vector3 c)
    {
        var sum = 0f;
        for (var i = 0; i < 3; i++)
            sum += Mathf.Pow(p[i] - c[i], 2);

        return sum <= Mathf.Pow(r, 2f);
    }
 
    /// <summary>
    /// 円の内側か
    /// (x - a)^2 + (y - b)^2 <= r^2
    /// </summary>
    /// <param name="p">円の中心座標</param>
    /// <param name="r">半径</param>
    /// <param name="c">対象となる点</param>
    /// <returns></returns>
    public static bool InCircle(Vector2 p, float r, Vector2 c)
    {
        var sum = 0f;
        for (var i = 0; i < 2; i++)
            sum += Mathf.Pow(p[i] - c[i], 2);

        return sum <= Mathf.Pow(r, 2f);
    }
}