/// <summary> /// 타원과 한 점간의 충돌 체크 /// </summary> /// <param name="ellipse">타원</param> /// <param name="pt">좌표</param> /// <returns>충돌 여부</returns> public static bool CheckEllipse(RectangleF ellipse, PointF pt) { EllipseCollision e = new EllipseCollision(10); var cp = MathTool.CenterPoint(ellipse); return(e.Collide(cp.X, cp.Y, ellipse.Width / 2F, ellipse.Height / 2F, pt.X, pt.Y, 0.1)); }
/// <summary> /// 원과 한 점간 충돌 체크 /// </summary> /// <param name="rt1">원</param> /// <param name="pt">점</param> /// <returns>충돌여부</returns> public static bool CheckCircle(RectangleF rt1, Point pt) { var gap = Math.Min(rt1.Width, rt1.Height) / 2; var v = MathTool.GetDistance(MathTool.CenterPoint(rt1), pt); return(v < gap); }
/// <summary> /// 원본 색상에 투명도가 적용된 색상을 덧씌웠을 때 색상 /// </summary> /// <param name="dest">원본 색</param> /// <param name="src">덧씌울 색</param> /// <param name="srcAlpha">덧씌울 색 투명도</param> /// <returns>최종색</returns> public static Color MixColorAlpha(Color dest, Color src, int srcAlpha) { var r = Convert.ToByte(MathTool.Constrain(MathTool.Map(srcAlpha, 0.0, 255.0, dest.R, src.R), 0, 255)); var g = Convert.ToByte(MathTool.Constrain(MathTool.Map(srcAlpha, 0.0, 255.0, dest.G, src.G), 0, 255)); var b = Convert.ToByte(MathTool.Constrain(MathTool.Map(srcAlpha, 0.0, 255.0, dest.B, src.B), 0, 255)); return(Color.FromArgb(r, g, b)); }
/// <summary> /// 서로 다른 두 타원간의 충돌 체크 /// </summary> /// <param name="ellipse1">타원1</param> /// <param name="ellipse2">타원2</param> /// <returns>충돌 여부</returns> public static bool CheckEllipse(RectangleF ellipse1, RectangleF ellipse2) { EllipseCollision e = new EllipseCollision(10); var cp = MathTool.CenterPoint(ellipse1); var cpT = MathTool.CenterPoint(ellipse2); return(e.Collide(cp.X, cp.Y, ellipse1.Width / 2F, ellipse1.Height / 2, cpT.X, cpT.Y, ellipse2.Width / 2F, ellipse2.Height / 2F)); }
/// <summary> /// 지정한 각도가 시작각과 끝각 사이에 있는지 확인 /// </summary> /// <param name="Angle">각도</param> /// <param name="StartAngle">시작각</param> /// <param name="EndAngle">끝각</param> /// <returns>비교 결과</returns> public static bool CompareAngle(double Angle, double StartAngle, double EndAngle) { bool ret = false; var ang = MathTool.StandardAngle(Angle); var stang = MathTool.StandardAngle(StartAngle); var edang = MathTool.StandardAngle(EndAngle); if (stang > edang) { double s1 = stang - 360, e1 = edang; double s2 = stang, e2 = edang + 360; ret = (s1 <= ang && ang <= e1) || (s2 <= ang && ang <= e2); } else { ret = stang <= ang && ang <= edang; } return(ret); }
/// <summary> /// 선분이 지정한 중점을 기준으로한 반경안에 드는지 충돌 체크 /// </summary> /// <param name="p1">선분 좌표1</param> /// <param name="p2">선분 좌표2</param> /// <param name="Location">중점</param> /// <param name="Dist">반경</param> /// <returns>충돌 여부</returns> public static bool CheckLine(PointF p1, PointF p2, PointF Location, float Dist) { return(Math.Abs(MathTool.GetDistance(p1, p2, Location)) < Dist); }