/// <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); }
public float GetCameraEulerY() { return(MathsTool.Limit2_360Degree(transform.localEulerAngles.y)); }