![计算机图形学:原理、算法及实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/947/23400947/b_23400947.jpg)
3.3 椭圆的扫描转换
中点画圆法可以推广到一般二次曲线的扫描转换,例如椭圆的扫描转换。图3.3-1所示通过坐标原点的椭圆方程为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P65_17335.jpg?sign=1738858016-IlNgmziklCTOJEX4APjVHXEHWdgvAAPG-0-15eb377245697baf1c22ccbae3f6be51)
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_7949.jpg?sign=1738858016-EUP89yuhwSaeldISUIeWpHXIW2s302N2-0-d082fed433793c8958d9d8f9d17b5e30)
图3.3-1 椭圆
其中a为沿x轴方向的长半轴长度,b为沿y轴方向的短半轴长度。由于椭圆具有对称性,因此只需讨论第一象限部分的椭圆的生成,其他三部分通过对称实现。在处理这段椭圆弧时,需要从弧上斜率为-1(即法向矢量为1)的点进一步把它分为上下两部分,如图3.3-2所示,法向量N>1,即点在上一部分时,在x方向进行单位增量;法向量N<1,即点在下一部分时,在y方向进行单位增量。
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_7952.jpg?sign=1738858016-ihuBP4pxDb8g0Z6enB1FMPOvYDidtsTl-0-fff1bf71380d36fc392f8fd5721df47f)
图3.3-2 椭圆法向量N=1
与中点画圆算法类似,首先在做选择的两个像素的中点处构造判别式,并根据判别式的正负来确定最佳逼近像素,然后,再构造下一个判别式。
假设当前最佳像素逼近点为(xi,yi),在x方向进行单位增量,构造中点为(xi+1,yi-0.5),则判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_17347.jpg?sign=1738858016-cFupbftouxbZDMn2i75iXFbePdPKMjQ3-0-6cbdd75b3812d32e72faf5a3318622a1)
若d<0,构造的中点在椭圆内,则下一个最佳像素点为(xi+1,yi)。再构造下一个中点为(xi+2,yi-0.5),则判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_7962.jpg?sign=1738858016-Lw8iKjzHy0akvJCRTiVwcP5NbyojkCLA-0-5e4893eaf933050f35d18f8834d9f757)
即增量为b2(2xi+3)。
若d≥0,构造的中点在椭圆外,则下一个最佳像素点为(xi+1,yi-1)。再构造下一个中点为(xi+2,yi-1.5),则判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_17349.jpg?sign=1738858016-hFCOAQ9yDaYhHYytfURgiFWJ5AcUpEym-0-994d6a1961bdf260f058750335ccefd2)
即增量为b2(2xi+3)+a2(-2yi+2)。
从起点(0,b)处开始构造初始中点(1,b-0.5),对应的初始判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_17356.jpg?sign=1738858016-tcvVYj8Tdf4E4UyAxlVtgaDTiZbrcTzs-0-2f8946a12e0dae37f8532454f8da8a62)
上述迭代是法向量N≥1时的算法。当N<1时,在y方向单位增量。根据微分知识,椭圆上点(x,y)处的法向量N为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_17350.jpg?sign=1738858016-cAlMXgPliQCI44lE8yjiZDRtjXp16Lgu-0-3dd161c75dfec68122799e6f73d97aed)
其中i和j分别为该点在x方向和y方向的单位向量。当N≥1时,法向量y分量较大;N<1时,法向量x分量较大。因此N≥1时,即为2b2x≤2a2y⇒b2x≤a2y,由于构造的中点和椭圆上的点非常接近,可以认为构造的中点(xi+1,yi-0.5)也满足
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P66_17352.jpg?sign=1738858016-GTMXtyWwgxNAUbGd8KJfG82y0MeKhjA3-0-f569a9904992c46e11012d31b41e8bb2)
在构造下一个中点时,如果上面的不等式不再成立,则说明这时椭圆上点的法向量N<1,这时开始在y方向单位增量。
与在x方向的单位增量计算迭代类似,构造N<1时的中点和判别式。假设当前最佳像素逼近点为(xi,yi),在y方向单位增量,构造中点为(xi+0.5,yi-1),则判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P67_7978.jpg?sign=1738858016-kEFSGOzb2MumxPXlpy6keBZK1ZqBajKN-0-0ff9a3dc85f0c303408bb2c21a926c23)
若d<0,构造的中点在椭圆内,下一个最佳像素点为(xi+1,yi-1)。再构造下一个中点为(xi+1.5,yi-2),则判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P67_17358.jpg?sign=1738858016-oL2GlArisK2iYlJYCCiug6Pni5vyFJMr-0-560cac97b5388d26b609d3cb946b0397)
即增量为b2(2xi+2)+a2(-2yi+3)。
若d≥0,构造的中点在椭圆外,下一个最佳像素点为(xi,yi-1)。再构造下一个中点为(xi+0.5,yi-2),则判别式为
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P67_17359.jpg?sign=1738858016-Hi7NKqI2PKEnd7Uyd9tz0LY9ju9qmNmq-0-58d28bc659c89ad7b750f6107ee1e2e3)
即增量为a2(-2yi+3)。
当yi=0时,迭代终止。
上述的椭圆中点算法函数代码参考如下:
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P67_17360.jpg?sign=1738858016-cRf81ALD8bFxSw3lxuheQPXhnlBAvQfY-0-b908883d863715baa6b7eee182a12e0f)
在应用程序中生成椭圆时,可建立如下的椭圆类:
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P68_17366.jpg?sign=1738858016-e9JZQgB4C2h2sJclIuC1Ssi4a4QsMMRA-0-c5cb41f021f4601cbb49d8011d788ea4)
在视图窗口类建立椭圆的集合:CArray<CEllipse,CEllipse>m_ellipse_array;,通过窗口拾取椭圆的中心点和设计两个半轴的长度,或者直接通过对话框输入对应值,生成的椭圆如图3.3-3所示。椭圆生成程序的流程和代码可参考3.1节“直线的扫描转换”中的相关内容实现。
![](https://epubservercos.yuewen.com/BFC8F2/12023547903396406/epubprivate/OEBPS/Images/Figure-P68_8045.jpg?sign=1738858016-d3gmNK2ynzQz65UZffjHsmUcMA4UxTSI-0-d69e177af5b80e5276c46acf97a4316b)
图3.3-3 椭圆的生成