현재 Bresenham의 원 그리기 알고리즘을 사용하고 있습니다. 원을 그리는 알고리즘을 사용하고 있지만 Bresenham의 방법은 단일 픽셀 두께 만 그리기 때문에 상대적으로 빠르고 효율적인 방법으로 특정 두께의 원을 그리기를 원합니다.). 다른 반지름으로 여러 원을 그릴 수 있다는 것을 알았지 만 매우 비효율적이라고 생각합니다. 효율성이 중요합니다. 왜냐하면 이것이 모든 마이크로 초가 소중한 Arduino에서 실행되기 때문입니다. 나는 현재 다음 코드를 사용하고 있습니다 :두께 그리기 원이있는 원
void circle(byte xc, byte yc, int radius, Colour colour) {
int x = -radius, y = 0, err = 2 - 2 * radius;
while(x < 0) {
setPixel(xc - x, yc + y, colour);
setPixel(xc - y, yc - x, colour);
setPixel(xc + x, yc - y, colour);
setPixel(xc + y, yc + x, colour);
radius = err;
if(radius <= y) {
err += ++y * 2 + 1;
}
if(radius > x || err > y) {
err += ++x * 2 + 1;
}
}
}
어떻게이 원의 두께를 지정할 수 있습니다 수정할 수 있을까? PS 외부 라이브러리를 사용하고 싶지 않습니다. 제발!
일반적인 방법은 2 개의 원 (내부와 외부)을 그리고 적절한 채우기 규칙 (예 : http://en.wikipedia.org/wiki/Even%E2%80%93odd_rule)을 사용하여 간격을 채우는 것입니다. – oakad
예,하지만 그렇게 느리지 않습니까? –
"압축 된"중개자를 사용할 수 있습니다 : 연결 대상 목록을 나타내는 링크 목록을 만들어 각 연결된 목록이 스캔 라인을 나타냅니다. Bresenham의 알고리즘을 사용하여 각 "검은 색"픽셀에 대한 노드를 각 관련 스캔 라인 목록에 넣습니다. 채우기 규칙을 염두에 둔 결과 구조를 탐색하여 대상 표면을 그립니다 (각 목록에 2 ~ 4 개의 노드 만 있음). – oakad