전체 글
-
[퍼즐: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..
-
[퍼즐:04] 퍼즐 모서리 정규화개발 2023. 8. 8. 00:32
정규화 모든 모서리를 x축에 딱 붙이는 작업을 한다. 이렇게 해야 다른 모서리와 비교하기 쉽기 때문이다. 그런데, 뭔가 각도 계산이 잘 못 된 것 같다. 대충 chat gpt와 copilot이 하라는대로 했더니 이렇게 되었음. 숫자의 의미를 잘 이해하고, 이 화면은 좌표평면을 뒤집어 놓은 상태라는 것을 잘 생각하면 해결 할 수 있을 듯 그냥 각도 계산을 잘못 했었음. 모서리의 각도를 θ라고 했을 때 -θ 로 돌리면 정규화가 잘 됨. 위에 잘못된 정규화는 θ인 각을 θ 만큼 돌려서 문제였음. (단순한 문제였음) 단, 여기에서 중요한 점이 있는데 각을 잘 구해야 한다는 점. 그렇지 않으면 '홀'과 '헤드'가 바뀌어서 나온다는 점이다. 처음에 코너를 찾을 때 찾은 코너를 시계방향이던, 시계반대방향이던 통일시켜..