有人知道绘制厚度椭圆的算法吗? 我用Google搜索,但我发现只有算法绘制1像素宽的椭圆,如下所示: http://homepage.smc.edu/kennedy_john/belipse.pdf
感谢。
答案 0 :(得分:0)
你需要多准确?
你想要真正的椭圆点在'x'像素宽度边界的近似中心吗?真正的椭圆点是内边缘吗?外边缘?
我问b / c你发现的绅士算法在可能的情况下努力坚持使用整数数学,所以我将附加整数算法的算法。
内边缘:改变Plot4EllipsePoints子程序以绘制x像素而不是一个,其中新的x像素更远离椭圆中心。 2像素,例如:
程序Plot4EllipsePoints(X,Y:longint);
begin
PutPixel(CX+X, CY+Y); {point in quadrant 1}
PutPixel(CX+X+1, CY+Y+1); {point in quadrant 1}
PutPixel(CX-X, CY+Y); {point in quadrant 2}
PutPixel(CX-X-1, CY+Y+1); {point in quadrant 2}
PutPixel(CX-X, CY-Y); {point in quadrant 3}
PutPixel(CX-X-1, CY-Y-1); {point in quadrant 3}
PutPixel(CX+X, CY-Y) {point in quadrant 4}
PutPixel(CX+X+1, CY-Y-1) {point in quadrant 4}
end;
答案 1 :(得分:0)
设E1为半径r +厚度/ 2的椭圆,E2为半径为r的椭圆 - 厚度/ 2.
调整Scanline Fill Algorithm以填充E1而不填充E2。
答案 2 :(得分:0)
带有厚度的椭圆是指两个椭圆之间的差异,一个是两个轴加长了1/2厚度,另一个是它们缩短了1/2厚度?
如果是这样,那么您可以将链接的算法调整为扫描线填充算法。您要做的一件事就是只沿短轴工作。 (沿长轴工作也有效,但涉及冗余计算)。
让我们说它比它高得多。 (如果是另一种方法,只需在绘图时翻转轴。)在这种情况下,您将为每个y位置绘制一个或两个水平线段。