ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [퍼즐:13] 끝나지 않는 코너 찾기
    개발 2024. 2. 14. 00:45

    대략 5% 정도는 코너를 잘 찾지 못한다.

    변수를 잘 조절하면 정확도를 높일 수 있을 것 같지만..

    쉽지가 않다.

    전체를 다 잘 되게하는 값을 찾는건 어려운 것 같다.

     

    문제는 검토를 내가 해야한다는 것이었다.

    지난 500 조각 퍼즐 맞출 땐 내가 하나하나 다 보면서 검토했다.

    너무 힘들어서 이번엔 조금 더 개선했다.

     

    "코너를 잘 찾은 퍼즐은 검토하지 말자"

    내가 생각한 잘 찾은 코너의 조건은 이렇다.

    1. 코너를 4개 찾았다.

    2. 코너가 대략 직사각형을 이룬다.

     

    직사각형을 판단하는 방법은 이렇다.

    1. 마주보고 있는 변의 길이가 비슷하다.

    2. 대각선의 길이가 비슷하다.

     

    비슷한 기준은 길이의 차이가 20% 이내이면 비슷하다고 판단했다.

     

    public bool IsRectangle(PointF[] points)
    {
        var d1 = Utils.Distance(points[0], points[1]);
        var d2 = Utils.Distance(points[1], points[2]);
        var d3 = Utils.Distance(points[2], points[3]);
        var d4 = Utils.Distance(points[3], points[0]);
    
        var diagonal1 = Utils.Distance(points[0], points[2]);
        var diagonal2 = Utils.Distance(points[1], points[3]);
    
        var ratio1 = Ratio(d1, d3);
        var ratio2 = Ratio(d2, d4);
        var ratio3 = Ratio(diagonal1, diagonal2);
    
        var isRectangle = ratio1 > 0.8 && ratio2 > 0.8 && ratio3 > 0.8;
    
        return isRectangle;
    
        double Ratio(double a, double b) => Math.Min(a, b) / Math.Max(a, b);
    }

     

    프로그램으로 오류가 있는 퍼즐만 검토하도록 했다.

    이번 2000 조각 퍼즐을 맞추면서 2000 조각을 전부 검토하는 작업은 하지 않았다.

    프로그램이 적당히 맞다고 하면 적당히 맞겠거니 하고 넘어갔다.

    약간 기도메타이기도..ㅋㅋ

     

    [퍼즐:08] 500조각 꼭지점 수동 추출

    이 글에선 MAUI로 만들었었는데, 이것도 모두 프로그램에 구현했다.

    하지만 추천해준 점에 코너가 포함되지 않는 경우도 있었다.

    이런 경우는 더 이상 뭘 하지 않았다.

    더 뭔가 구현할 체력이 남아있지 않았다.

     

    100 개 정도 하나하나 직접 코너를 지정했다.

    프로그램이 빨간 화살표 코너를 추천하지 않았다.

Designed by Tistory.