網路城邦
上一篇 回創作列表 下一篇   字體:
實心圓的繪製
2019/11/28 15:16:29瀏覽313|回應0|推薦0

實心圓的繪製

        上週發表了有關"320x240彩屏液晶繪圖程式"一文後,就一直思考如何繪出實心圓,因為在9325TP的彩色TFT LCD螢幕所提供之C程式,有繪製點,線,方框與方塊等子程式,但是卻沒提供繪製圓形的程式,上次從SIN()與COS()指令,已可繪製圓圈的程式,但是如拿來繪製"實心圓"則會在實心圓內部,產生許多殘留雜點,因此就在構思解決的方法,如今已找到改善的方法,就在本文中發表。

        繪製實心圓,基本上是利用LINE的子程式,將實心圓的中心點與外圍的圓圈,用LINE子程式繪製一氣線,那只要每一個角度繪製一條,那麼繪製360度以後就完成實心圓,但是這有一個副作用,那就是當半徑在40個點時,因為線條以一個點為單位時,實心圓不會有殘留雜點,不過當半徑愈大時,在最外圍就會有間隙沒有填滿,產生殘留雜點之現象,因此在程式中加了一個判斷式,那就是在半徑小於40點時,計算外圍圈的X,Y座標時,只要用360度即可,而當超過半徑40點時,在計算X,Y座標時,就將外圍圈的密度加大一倍,那就是720度的方式,讓產生的座標點加倍,那就可以改善殘留雜點的問題,可是如此之下,繪製的時間將比較長,不過最起碼實心圓的品質較佳。

        以下時程式範例:

           //*********      同心圓

           x0=120;y0=230;

           z0++;if(z0>8) z0=0;

           z1 = rand()%80;

           for(v=0;v<=80;v++)

          {        for(i=0;i<720;i+=1)

                    {      x1 =cos(i)*v;

                            y1 =sin(i)*v;

                            x2 = x0+x1;if(x2>=225) goto CYCLE;

                            if(x2<=15) goto CYCLE; //判斷繪製位置是否超出邊框

                            y2 = y0+y1;if(y2>=310) goto CYCLE;

                            if(y2<=120) goto CYCLE; 

                            Line( x0,y0,x2,y2,YCOLOR[z0]);

                            CYCLE:

                                       _nop_();

                                        if(v<=40)i=720;

                    }

         }

        有關繪製的時間比較長部份,如果將來有找到更精減的程式,再提供給同好參考。

 

( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=PYANG&aid=131100811