【发布时间】:2017-02-19 15:11:28
【问题描述】:
我想逐行(例如顺时针方向)绘制圆,从圆的中心逐个像素。但要避免重绘像素(这很慢)。
想象一下,这就像“雷达”,每回合只更新一次。
没有 RAM 来保存所有填充像素的数组(最大先前线点),也没有 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 的概念。由于我们不知道您使用的是什么库,因此我们很难提供帮助。 -
也许您应该展示您的迭代方式,以便我们帮助您实施。
-
这是微控制器规则,它没有帮助。例如 void Adafruit_GFX_AS::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t 颜色) { int16_t 陡峭 = abs(y1 - y0) > abs(x1 - x0);如果(陡峭){交换(x0,y0);交换(x1,y1); } if (x0 > x1) { 交换(x0, x1);交换(y0,y1); } int16_t dx, dy; dx = x1 - x0; dy = abs(y1 - y0); int16_t err = dx / 2; int16_tystep;如果 (y0
-
好的,我会做干净的工作代码
标签: c++ algorithm plot graphics rasterizing