【发布时间】:2011-01-02 18:50:08
【问题描述】:
我使用 wu 技术编写了一个画线算法。它有效,但有问题。见下文。
我想知道是否有人解决了绘制抗锯齿线的问题?令人惊讶的是,谷歌搜索结果没有令人满意的算法。许多讨论,但没有一个完整、强大的算法,独立于对图形库的任何依赖。
如果有人想要以下函数的示例代码,请告诉我。我希望用更强大的功能替换它,但我还没有找到。我确信我的算法可以改进,但它确实有效。
结构 xya { 诠释 x; 整数y; uint8_t一个; xya(int x=0, int y=0, uint8_t a=0) : x(x), y(y), a(a) {} }; 内联 void wuline(xya*& out, int x0, int y0, int x1, int y1) { 短 DeltaX、DeltaY、XDir; 静态常量 int 强度 = 8; 如果 (y0 > y1) { 短温度 = y0; y0 = y1; y1 = 温度; 温度 = x0; x0 = x1; x1 = 温度; } *out++ = xya(x0,y0,255); 如果 ((DeltaX = x1 - x0) >= 0) { XDir = 1; } 别的 { XDir = -1; DeltaX = -DeltaX; } 如果 ((DeltaY = y1 - y0) == 0) { 而(DeltaX--!= 0) { x0 += XDir; *out++ = xya(x0,y0,255); } 返回; } 如果(DeltaX == 0) { 做 { y0++; *out++ = xya(x0,y0,255); } 而(--DeltaY!= 0); 返回; } 如果(DeltaX == DeltaY) { 做 { x0 += XDir; y0++; *out++ = xya(x0,y0,255); } 而(--DeltaY!= 0); 返回; } 如果(DeltaY > DeltaX) { 无符号短 ErrorAcc = 0; unsigned short ErrorAdj = ((unsigned long) DeltaX > 强度; *out++ = xya(x0,y0,加权 ^ 255); *out++ = xya(x0+XDir,y0,加权); } *out++ = xya(x1,y1,255); } 别的 { 无符号短 ErrorAcc = 0; unsigned short ErrorAdj = ((unsigned long) DeltaY > 强度; *out++ = xya(x0,y0,加权 ^ 255); *out++ = xya(x0,y0+1,加权); } *out++ = xya(x1,y1,255); } }【问题讨论】:
-
您的满意标准是什么?