전체 글
-
[퍼즐:08] 500조각 꼭지점 수동 추출개발 2024. 1. 1. 12:38
윤곽선을 추출하는 방법은 아주 간단하다. 앞선 글에서 많이 다뤘다. 문제는 꼭지점(코너)를 검출하는 것이다. 코너를 제대로 검출하지 못했을 때 어떻게 할 것인가? 과거 나의 글 "퍼즐 조각 외곽선에서 코너 검출" 에서 보면 이런 말을 써놨다. 방법2: 코너를 30개 쯤 찾는다. 코너의 최소 거리를 짧게 10 정도. 찾아진 점들사이에서 내가 찾고 싶었던 점 4개를 찾는다. 방법1에서 원하는 점을 못 찾았을 때 방법2로 전환해서 점 4개를 찾을 계획 찾은 30개 점 중 가장 직사각형에 가까운 점 4개 조합을 찾으면 될 듯! 그런데 막상 구현하려고 보니 이렇게 해도 예외가 발생하면 어떻게 하지? 500 개를 돌려보니 코너를 찾지 못하는 경우는 약 20개 정도였다. 20개를 위해서 복잡한 구현을 하기 싫었다. ..
-
[퍼즐:07] 500조각 퍼즐 맞추기 (촬영) (2000조각 연습)개발 2023. 12. 25. 21:12
500조각 퍼즐로 테스트를 해본다. 500번까지 번호를 쓰고, 전부 사진 찍고, 데이터 처리를 한다. 사진을 하나하나 다 찍고 저장하기 위해서 사진 찍어주는 어플까지 만들었다. https://github.com/jkwchunjae/JigsawPuzzleSolver/tree/main/PuzzleCaptureMauiApp MAUI로 만들었는데, 운이 좋게도 간단히 만들 수 있었다. 기능은 없고, 사진을 찍으면 파일 번호가 1씩 자동 증가 하도록 만들어서 연속으로 사진 찍을 때 편했다. 이렇게 해서 번호를 인식해야 하는 작업을 피할 수 있었다. 이미지 처리해서 데이터 추출 후 퍼즐 표를 만들어서 잘 맞춰지는지 알아볼 계획.
-
[양팔저울] 게임 설명서 (기본)HelloJkw 개발 2023. 11. 13. 23:22
홈페이지 양팔저울 게임 설명서 https://hellojkw.com/game/libra/home 게임 목표 양팔 저울을 이용해 각 큐브의 무게를 알아내는 것. 게임 규칙 총 플레이어는 7명이다. 순서를 정하면 변경할 수 없고, 계속 돌아간다. 5개의 큐브가 있다. 각 큐브의 무게는 자연수 1~20 이고, 중복되지 않는다. 같은 색 큐브는 모두 무게가 같다. 양팔 저울만을 사용해서 큐브의 무게를 맞춰야 한다. 양팔 저울은 두 개가 있는데, 하나는 메인 저울, 다른 하나는 보조 저울이다. 자신의 차례가 되면 양팔저울에 2개 이상의 큐브를 올려야 한다. (가지고 있는 큐브가 2개 미만이면 내 차례는 지나간다) 양팔 저울에 한 번 올린 큐브는 내릴 수 없다. 계속 누적해서 올려야 한다. 메인 저울의 균형을 맞추..
-
숫자 게임 4=10 솔루션 프로그램취미 코딩 2023. 11. 10. 13:59
https://play.google.com/store/apps/details?id=app.fourequalsten.fourequalsten_app&pcampaignid=web_share 4=10 - Google Play 앱 캐주얼하고 재미있는 숫자 퍼즐 play.google.com 최근에 숫자 퍼즐 게임 4=10을 하고 있다. 광고가 없고, 평가가 아주 좋아서 시작하게 되었다. 숫자 4개를 가지고 사칙연산과 괄호를 사용해 10을 만들면 되는 간단한 게임이다. 500 레벨이 정말 재미있다고 해서 열심히 달리고 있다. 역시나 이 문제를 풀어주는 프로그램을 만들었다.. 250 레벨까진 머리로 했는데, 생각하기가 너무 귀찮았고, 만드는 것도 재밋겠다 싶어서 만들어봤다. 그래도 500 까지 머리로 풀어볼 예정! ..
-
[퍼즐:06] 1차 중간 점검개발 2023. 8. 13. 18:14
다른 퍼즐 100 조각을 가지고 테스트 해본다. 1. resize 2. outline 추출 3. corner 추출 4. edge 분리 뭐 하나 쉽게 되는게 없다. 1. 모서리 분리 과정에서 모서리의 경계 찾기 그림에서 보는 것과 같이 자주색 엣지가 노란색 쪽으로 약간 넘어갔다. 이 오차를 무시할 수 없는 이유는 끝 점을 기준으로 정규화를 할 텐데, 끝이 저렇게 붕 뜨게 되면 나중에 모서리 비교할 때 제 짝을 못 찾게 된다. 이렇게 되는 이유는 코너 검출에서 코너가 완벽히 구석이 아니라 약간 안쪽으로 설정되는데, 모서리 중 하나에 더 가까이 붙는 경우가 많았다. 몇 픽셀 차이 아니지만 확대해서 보면 차이가 보였다. 2. 코너 검출 하기 코너가 딱 4개가 안 찾아지는 것도 문제이지만, 이 경우는 이미 알고있..
-
[퍼즐:05] 모서리 테스트개발 2023. 8. 11. 21:55
쉽게 말해 각 퍼즐의 두 모서리가 이어지는지 검사하는 것. 모서리 정규화 과정에서 Line, Hole, Head로 구분했다. 한 퍼즐의 Hole을 잡고 나머지 퍼즐의 Head와 비교하며 가장 가까운 edge를 찾는 과정이다. 정규화 한 edge를 그냥 비교하면 안되고, 한 쪽을 뒤접어서 비교해야 한다. public Edge Reverse() { Point first = Points.OrderBy(p => p.X).First(); Point last = Points.OrderBy(p => p.X).Last(); // last -> first의 각을 계산한다. pi에 가까운 숫자가 나온다. var angle = CalculateAngleBetweenPoints(last, first); var reversed..
-
[퍼즐:04] 퍼즐 모서리 정규화개발 2023. 8. 8. 00:32
정규화 모든 모서리를 x축에 딱 붙이는 작업을 한다. 이렇게 해야 다른 모서리와 비교하기 쉽기 때문이다. 그런데, 뭔가 각도 계산이 잘 못 된 것 같다. 대충 chat gpt와 copilot이 하라는대로 했더니 이렇게 되었음. 숫자의 의미를 잘 이해하고, 이 화면은 좌표평면을 뒤집어 놓은 상태라는 것을 잘 생각하면 해결 할 수 있을 듯 그냥 각도 계산을 잘못 했었음. 모서리의 각도를 θ라고 했을 때 -θ 로 돌리면 정규화가 잘 됨. 위에 잘못된 정규화는 θ인 각을 θ 만큼 돌려서 문제였음. (단순한 문제였음) 단, 여기에서 중요한 점이 있는데 각을 잘 구해야 한다는 점. 그렇지 않으면 '홀'과 '헤드'가 바뀌어서 나온다는 점이다. 처음에 코너를 찾을 때 찾은 코너를 시계방향이던, 시계반대방향이던 통일시켜..
-
[퍼즐:03] 퍼즐 조각 외곽선을 각 모서리로 분할개발 2023. 8. 7. 00:26
외곽선과 코너를 찾은 후 할 일은 각 외곽선을 4개의 모서리(엣지)로 나누는 것이다. 이 작업은 생각보다 간단했다. 코너 4개의 번호를 0, 1, 2, 3 붙인다. (0번과 3번은 대각선 관계에 놓이도록 지정한다.) 그리고 4개의 점으로 만드는 직사각형을 설정한다. 모든 외곽선 점을 순회하면서 직사각형의 어느 선분에 가까운 점인지 판단한다. 만약 점과 선분과의 거리가 멀다면 이전 점의 정보를 가져와서 사용한다. 외곽선이 연속해서 나타난다는 점을 이용했다. 흰색 점이 선분에서 먼 점이다. copilot의 도움으로 어렵지 않게 구현할 수 있었다. https://github.com/jkwchunjae/JigsawPuzzleSolver/commit/590465af0fc7f16a16742c25803054fd79f..