有没有人知道用厚度绘制椭圆的算法? 我GOOGLE了,但我发现只有算法,绘制一个像素宽度的椭圆,像这样: http://homepage.smc.edu/kennedy_john/belipse.pdf椭圆厚度算法
谢谢。
有没有人知道用厚度绘制椭圆的算法? 我GOOGLE了,但我发现只有算法,绘制一个像素宽度的椭圆,像这样: http://homepage.smc.edu/kennedy_john/belipse.pdf椭圆厚度算法
谢谢。
通过一个厚度椭圆你是指两个椭圆之间的差异,其中两个轴已经延长了1/2厚度,另一个是它们缩短了1/2的厚度?
如果是这样,那么您可以将链接的算法调整为扫描线填充算法。你想要做的一件事是只沿短轴工作。 (沿长轴工作也是如此,但涉及冗余计算)。
比方说它比它更宽。 (如果在绘图时反其道而行,则只需翻转轴。)在这种情况下,您将为每个y位置绘制一个或两个水平线段。
你需要多准确?
你想要真正的椭圆点在'x'像素宽度边界的近似中心吗?真正的椭圆点是内边缘吗?外边缘?
我问b/c绅士的算法你发现尽可能坚持整数数学,所以我会追加到他的算法与整数工作以及。
内侧边缘:改变Plot4EllipsePoints子例程绘制的,而不是一个,其中,所述新的x像素进一步远离椭圆的中心x像素。 2像素例如:
procedure Plot4EllipsePoints(X,Y:longint); http://homepage.smc.edu/kennedy_john/belipse.pdf
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;
取自相同内侧边缘,但更接近椭圆中心。
设E1是半径r +厚度/ 2的椭圆形和E2半径r的椭圆 - 厚度/ 2。
适应Scanline Fill Algorithm填补E1无填充E2。