我想逐行画出圆圈(例如顺时针方向),从圆圈中心逐个像素地画圆圈。但避免重新绘制像素(这很慢)。在C++中从中心绘制实心圆圈?
想象一下,这就像每个回合只更新一次的“雷达”。
没有内存可容纳所有填充像素的阵列(以前的最大线条点),也不需要GPU或高层库(通过函数DrawPoint(x,y)绘制)。
我具备的功能画线和点:
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
这是单片机rutine它没有帮助。例如空隙Adafruit_GFX_AS ::的drawLine(int16_t X0,Y0 int16_t, \t \t \t int16_t X1,Y1 int16_t, \t \t \t uint16_t颜色){ int16_t陡= ABS(Y1 - Y0)> ABS(X1 - X0); (陡峭)交换(x0,y0);交换(x0,y0);交换(x0,y0);交换(x0,y0) swap(x1,y1); } if(x0> x1)swap(x0,x1); swap(y0,y1); } int16_t dx,dy; dx = x1-x0; dy = abs(y1-y0); int16_t err = dx/2; int16_t ystep; if(y0
user1329019