전체 글
-
[퍼즐:10] 500조각 퍼즐 완성개발 2024. 1. 1. 23:01
퍼즐 연결 정보를 진짜 퍼즐을 맞춰보자. 구석 조각 하나를 찾아서 시작한다. 빈칸 조각을 선택해서 후보를 추천해준다. 직접 조각을 찾아서 맞춰보고 선택해서 확정한다. 퍼즐 조각 추천 프로그램 자동으로 퍼즐 전체를 맞추는 것이 아니라, 조금씩 추천하고 조금씩 맞춰나가는 방법이다. 후보 선택 이렇게 일부 맞춰진 상태가 있다고 가정하고, 9번 줄을 맞춰보자. 아래 그림에서 더하기(+) 버튼을 눌러서 찾고 싶은 후보에 넣고, 계산 버튼을 누른다. 계산 버튼을 누르면 아래 그림 처럼 몇가지 후보가 나온다. 세 가지 후보 중 하나가 정답일 확률이 높다. 직접 퍼즐을 비교해보고 정답인 퍼즐을 선택해서 확정한다. 원리는 말로 쓰면 간단하다. 처음 (8,0) 에 있는 417번 조각의 밑 부분과 연결될 수 있는 퍼즐을 쭉..
-
[퍼즐:09] 500조각 퍼즐 데이터 생성개발 2024. 1. 1. 12:54
퍼즐 500 개 사진으로 데이터를 생성한다. 데이터를 생성한 이후로는 이미지 처리를 할 필요가 없어진다. (맥으로 개발을 이어나갈 수 있다는 뜻..ㅋㅋ) 데이터 처리는 두 단계로 나눠진다. 1. 퍼즐 조각의 윤곽선과 코너를 인식하고 저장 (json) 2. 퍼즐 윤곽선을 이용해 조각 간 연결 정보 생성 윤곽선 저장 윤곽선의 좌표를 정규화 해서 json으로 저장한다. 윤곽선을 그대로 저장하는 것은 아니고, 꼭지점(corner)를 기반으로 모서리(edge)를 분리한 뒤 저장한다. 모서리 정보에는 모서리 타입과 양쪽 꼭지점의 거리(모서리 길이)를 저장한다. 타입은 헤드, 홀, 라인이라는 세가지 종류가 있다. 윤곽선 정보는 좌표를 그냥 저장하지 않고 정규화해서 저장한다. 정규화한다는 뜻은 양끝 꼭지점을 x 축으로..
-
[퍼즐: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..