有人知道绘制有厚度椭圆的算法吗?我用谷歌搜索,但我发现只有绘制 1 像素宽度椭圆的算法,如下所示: http ://homepage.smc.edu/kennedy_john/belipse.pdf
谢谢。
有人知道绘制有厚度椭圆的算法吗?我用谷歌搜索,但我发现只有绘制 1 像素宽度椭圆的算法,如下所示: http ://homepage.smc.edu/kennedy_john/belipse.pdf
谢谢。
令 E1 为半径为 r + 厚度 / 2 的椭圆, E2 为半径为 r - 厚度 / 2 的椭圆。
调整扫描线填充算法以填充 E1 而不填充 E2。
有厚度的椭圆是指两个椭圆之间的差异,一个椭圆的两个轴被延长了 1/2 厚度,另一个椭圆被缩短了 1/2 厚度?
如果是这样,那么您可以将链接算法调整为扫描线填充算法。你想做的一件事是只沿着较短的轴工作。(沿长轴工作也可以,但涉及冗余计算)。
假设它的宽度大于高度。(如果是相反的方式,您只需在绘制时翻转轴。)在这种情况下,您将为每个 y 位置绘制一个或两个水平线段。
你需要多准确?
你想要真正的椭圆点在'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;