Beispiel #1
0
    /// <summary>
    /// 2D扇形与2D点碰撞检测
    /// (x-a)²+(y-b)²=r²
    /// </summary>
    /// <returns><c>true</c>, if d sector2 d was point2ed, <c>false</c> otherwise.</returns>
    /// <param name="targetV">目标点坐标</param>
    /// <param name="sectorV">扇形中心点坐标</param>
    /// <param name="sectorDir">扇形中心线朝向</param>
    /// <param name="sectorAngle">扇形张开角度(1/2,比如张开是60度,这里就是30)</param>
    /// <param name="sectorR">扇形半径</param>
    public static bool Point2D_Sector2D(Vector2 targetV, Vector2 sectorV, Vector2 sectorDir, int sectorAngle, float sectorR)
    {
        //判定距离,以点targetV.x画一条垂直于x轴的线,如果跟圆方程有两个解就是圆内部,反之圆外部
        //根据圆方程,r2-x2如果大于等于0说明y有两个值,反之没值,点不在圆内
        float x2 = sectorV.x - targetV.x;

        x2 = x2 * x2;
        float r2 = sectorR * sectorR;

        if (r2 - x2 < 0)
        {
            return(false);
        }

//		float dis = Vector2.Distance(targetV,sectorV);
//		if (dis > sectorR * sectorR)
//			return false;

        //判定角度
        Vector2 vSector2Target = targetV - sectorV;

        vSector2Target.Normalize();
        float n = Vector2.Dot(vSector2Target, sectorDir);

        if (n > MathsTool.Cos(sectorAngle))
        {
            return(false);
        }

        return(true);
    }
Beispiel #2
0
 public float GetCameraEulerY()
 {
     return(MathsTool.Limit2_360Degree(transform.localEulerAngles.y));
 }