반응형

마우스 Move 또는 Left Button Click 시에 마우스 포인트가 어떠한 선 위에 있는지를 체크하는 방법이다.

하기의 코드에 문제가 있거나, 개선이 필요한 부분이 있다면 의견 주시면 감사하겠습니다.

 

 

Function의 첫번째 파라미터는 선의 시작 포인트, 두번째 파라미터는 선의 종료 포인트, 세번째 파라미터는 마우스의 포인트를 말한다.

    public static bool CheckPointOnLine(Point startP, Point endP, Point point)
    {
        bool check = false;

        double dx = endP.X - startP.X;
        double dy = endP.Y - startP.Y;
        double dx1 = point.X - startP.X;
        double dy1 = point.Y - startP.Y;
        double a = 0, b = 0, c = 0;

        if (Math.Abs(dx) > 0 && Math.Abs(dy) < Math.Abs(dx))
        {
            if (dx * dx1 >= 0 && Math.Abs(dx1) <= Math.Abs(dx))
            {
                a = (dy * dx1);
                b = (dx * dy1);
                c = Math.Abs(dx * 5);
                if (Math.Abs(a - b) <= c)
                {
                    check = true;
                }
            }
        }
        else if (Math.Abs(dy) > 0)
        {
            if (dy * dy1 >= 0 && (Math.Abs(dy1) <= Math.Abs(dy)))
            {
                a = (dx * dy1);
                b = (dy * dx1);
                c = Math.Abs(dy * 5);
                if (Math.Abs(a - b) <= c)
                {
                    if (Math.Abs(a - b) <= c)
                    {
                        check = true;
                    }
                }
            }
        }

        return check;
    }

 

반응형

+ Recent posts