字體:小 中 大 | |
|
|
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 ) |