원 중심에서 한 픽셀 씩 선을 따라 (예 : 시계 방향으로) 그립니다. 그러나 픽셀을 다시 그리지 마십시오 (느림).C++의 중심에서 채워진 원을 그립니다.
이것은 매 턴마다 한 번만 업데이트되는 "레이더"와 같다고 상상해보십시오.
모든 채워진 픽셀 (최대 이전 선 점)과 GPU 또는 하이 레벨 라이브러리 (DrawPoint (x, y) 함수로 그리기)의 배열을 저장할 RAM이 없습니다.
void DrawLineFromCenterXYToAngle(int centerX, int centerY, float angle)
{
.... instead of angle it is possible to find points of the circle and iterate it
.... find line points by Bresenham's line algorithm
{
DrawPoint(int x, int y);
}
}
void DrawPoint(int x, int y)
{
PixelDraw_Slow(x,y)=GetColor_VerySlow(x,y);
}
가 지금은 각도를 반복하고 매우 느리게 때문에 여러 번 다시 그릴 중앙에 픽셀로, 원을 가지고 :
나는 라인과 포인트를 그릴 기능을 가지고 있습니다. 그리고 최적화가 필요합니다.
빠른 속도를 내면 모양이 완벽한 원이 아닐 수도 있습니다.
표준'C++ '에는 GUI 개념이 없으므로 일부 라이브러리를 사용해야합니다. 우리가 사용하고있는 라이브러리가 무엇인지 모르기 때문에 우리가 도울 수 없습니다. – drescherjm
어쩌면 우리가 구현을 도와 줄 수 있도록 어떻게 반복하는지 보여줘야 할 것입니다. – drescherjm
이것은 도움이되지 않는 마이크로 컨트롤러의 루틴입니다. 예 공극 Adafruit_GFX_AS 들어 :: drawLine 가파른 = ABS int16_t { (X0, int16_t의 Y0, \t \t \t int16_t의 X1, int16_t의 Y1, \t \t \t uint16_t 색 int16_t) (Y1 - Y0)> ABS (X1 - X0); if (steep) { swap (x0, y0); 스왑 (x1, y1); } if (x0> x1) { swap (x0, x1); 스왑 (y0, y1); } int16_t dx, dy; dx = x1 - x0; dy = abs (y1 - y0); int16_t err = dx/2; int16_t ystep; if (y0
user1329019