上週發表了有關"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;
}
}
有關繪製的時間比較長部份,如果將來有找到更精減的程式,再提供給同好參考。
限會員,要發表迴響,請先登入


