본문 바로가기

NDS

Palib - PA_16bitDrawCircle 함수

2008/08/22 - [NDS/NDS_Palib] - PA_Draw 는 어떻게 그려질까?
2008/08/25 - [NDS/NDS_Palib] - PA_Draw 는 어떻게 그려질까? 2

소스가 좀 긴편이다.


DrawCircle을 약간 변형해서 원 안까지 칠하도록 바꾸었다.(PA_Put16bitCircle)

사용자 삽입 이미지

원리는 위 이미지처럼 8등분해서 빨강 초록 부분을 칠하고 x, y값을 바꾸어(90도 돌린효과) 노랑 파랑 부분을 칠하던 것을 아래 이미지 1 처럼 상단 빨강의 좌표와 하단 초록의 좌표를 수직으로 이어주고(PA_Draw16bitLine) 같은 방식으로 상단 초록-하단 빨강, 상단 노랑-하단 파랑, 상단 파랑-하단 노랑을 이어주어 원안까지 칠해주었다.

사용자 삽입 이미지

이미지 1



터치 인식 위치끼리 이어주는것은 PA_Draw16bitLine함수를 그대로 가져다가 Pixel을 찍어주는 위치에 radius값을 가지는 원을 그려주는 것으로 대체 했다.(PA_Draw16bitCircleLine)

결국 수정한것없이 그대로 가져다 짜집기 한것이 되어버렸지만; 함수 네이밍도 내맘대로;
그래도 원하는대로 출력되고 있다.
사용자 삽입 이미지
한가지 해결해야 할점이라면 위 이미지에 보여지는것처럼 사각 픽셀은 1-10까지 세분화 할수있는데 반해 원형 픽셀은 반지름 값을 가지고 정수형 계산?을 하기때문에 2-3, 4-5, 6-7, 8-9 크기의 픽셀이 차이가 없다. (사실 10픽셀>>2 로 5픽셀을 반지름으로 쓰고있어서 1-5단계가 나오는것이 맞긴하지만 지름을 1-10단계로 생각해보면 더 세분화시킬 가능성이 있긴하다)

해결 방법이라면 GyonG님께서 소개해주신 알고리즘
http://scgyong.net/wiki/index.php/Circle_Drawing
http://helloktk.tistory.com/archive/20080603
중에 "중심이 원점이 아닌경우 전체적으로 평행이동 시키면 된다"고 하는데 현재는 이해 불가이기때문에 한참 들여다봐야 할듯 싶다.

실제 업데이트는 위 문제를 해결하고 나서 할 예정...
----> 약간의 편법으로 수정했다.
사용자 삽입 이미지
짝수의 픽셀은 그다음 픽셀에서 중앙의 1줄을 지우는 방식으로 해결했다.(사실은 지웠다기보다 중심을 x, y -1 픽셀씩 이동했다.)
그래도 6픽셀/8픽셀 정도 빼고는 어색해 보이지 않아서 이대로 쓰기로 했다. 2픽셀이 어떻게 나올까 고민했었는데 원하는데로 나왔다.

PA_Put16bitCircle 함수도 잘못된 부분이 있었는데 전엔 출력시에 티가 나지않아서 몰랐다가 다시 수정했다.

'NDS' 카테고리의 다른 글

Palib - Shape Recognition 원리  (0) 2008.08.26
Palib - 문자인식 Shape Recognition  (0) 2008.08.25
PA_Draw 는 어떻게 그려질까? 2  (0) 2008.08.25
PA_Draw 는 어떻게 그려질까?  (2) 2008.08.22
NDS SuChupDS 0.2.1 BMP 저장 이미지  (0) 2008.08.22