?? 液晶上畫圓.txt
字號:
C51編程:液晶上畫圓的程序終于出來了,請大蝦們幫我看看能否再簡化一下。謝謝! [xiaoqi.] [96次] 01-5-22 下午 11:56:31
/************************************************/
/*畫圓。數學方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
/************************************************/
//col,row為全局變量
void circle(Uchar Ox,Uchar Oy,Uchar Rx)
{
unsigned int xx,rr,xt,yt,rs;
yt=Rx;
rr=Rx*Rx;
rs=Rx*71/100; //分開1/8圓弧來畫,0.71=根號2
for (xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while ((yt*yt)>(rr-xx))yt--;
col=Ox+xt; //第一象限
row=Oy-yt;
point();
col=Ox-xt; //第二象限
row=Oy-yt;
point();
col=Ox-xt; //第三象限
row=Oy+yt;
point();
col=Ox+xt; //第四象限
row=Oy+yt;
point();
/***************45度鏡象變換,畫另一半***************/
col=Ox+yt; //第一象限
row=Oy-xt;
point();
col=Ox-yt; //第二象限
row=Oy-xt;
point();
col=Ox-yt; //第三象限
row=Oy+xt;
point();
col=Ox+yt; //第四象限
row=Oy+xt;
point();
}
}
怕是很難精簡了! [lwd110] [7次] 01-5-23 上午 11:55:08
要么在一個point()中畫8個點,節約一點函數調用時間?
簡化了一次,目標代碼短了200字節左右。請看: [xiaoqi.] [35次] 01-5-23 下午 03:29:29
/************************************************/
/*畫圓。數學方程(X-Ox)^2+(Y-Oy)^2=Rx^2 */
/************************************************/
void circle(Uchar Ox,Uchar Oy,Uchar Rx)
{
unsigned int xx,rr,xt,yt,rs;
yt=Rx;
rr=Rx*Rx+1; //補償 1 修正方形
rs=(yt+(yt>>1))>>1; //(*0.75)分開1/8圓弧來畫
for (xt=0;xt<=rs;xt++)
{
xx=xt*xt;
while ((yt*yt)>(rr-xx))yt--;
col=Ox+xt; //第一象限
row=Oy-yt;
point();
col=Ox-xt; //第二象限
point();
row=Oy+yt; //第三象限
point();
col=Ox+xt; //第四象限
point();
/***************45度鏡象畫另一半***************/
col=Ox+yt; //第一象限
row=Oy-xt;
point();
col=Ox-yt; //第二象限
point();
row=Oy+xt; //第三象限
point();
col=Ox+yt; //第四象限
point();
}
}
利害!!有否上機試呢,效果好嗎? [sampoo㊣] [1次] 01-5-23 下午 04:18:49
顯示完全ok!速度非常快 [xiaoqi.] [2次] 01-5-23 下午 04:25:24
只改動一個表達式就可縮200字節,C51的算術表達式效率是否太低了? [lwd110] [4次] 01-5-23 下午 04:50:32
修改了0.75的運算方法,拋棄了除法運算,一個16位的(avr)除法程序可不小啊 [xiaoqi.] [12次] 01-5-23 下午 05:59:48
ICCAVR標準板沒有加強優化,所以相對代碼要稍長一些,C51用到8級優化當然不同。
點擊這里回復這篇貼子>>
_____________________________________________________________________________
Copyright?,C51BBS論壇 2000-2001
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -