|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
一旦你有了思想,那你编的程序就有了灵魂,不管是什么语言到了你的手里都会是你的工具而已,他们的价值是能尽快帮助你实现你想要的目标。但是如果你没有了思想,那就像是海里的帆船失去了船帆,是很难到打海的另一边的。
因为开辟的顺应性必要,J2ME程序员在良多时分不克不及利用MIDP2.0举行开辟。可是MIDP1.0的功效和2.0相差良多,很多有用的函数都没有供应。这必要程序员本人完成。本文先容了一个Canvas中的有用的函数,用来在Canvas中添补三角形地区。
importjavax.microedition.lcdui.Canvas;importjavax.microedition.lcdui.Command;importjavax.microedition.lcdui.CommandListener;importjavax.microedition.lcdui.Displayable;importjavax.microedition.lcdui.Graphics;
publicclassTriangleextendsCanvasimplementsCommandListener{privateGraphicsg;publicTriangle(){}
protectedvoidpaint(Graphicsarg0){g=arg0;g.setColor(0xffffff);g.fillRect(0,0,this.getWidth(),this.getHeight());g.setColor(0x000000);fillTriangle(5,40,100,10,200,200);}
/***前提:点(x0,y0),(x1,y1),(x2,y2)构成三角形。*办理举措:设直线L过点(x1,y1),(x2,y2)两个点*(x3,y3)是直线L上的点,从(x0,y0)画线到(x3,y3)。*只需我们取到直线L下面的一切显现的象素点,就能够完成三角形的添补。**成绩:直线L有两种形态,竖直和倾斜(包含程度),竖直形态,我们很简单办理。*倾斜形态,我们必要求得直线的斜率,这看似要利用浮点数,可是我们可使用整数办理。*由于当直线(线段)上的两个端点(x1,y1),(x2,y2)的横坐标x1!=x2时*即(x1-x2的相对值年夜于即是1),*纵坐标的差值y2-y1最年夜是屏幕的高。以是(y1-y2)/(x1-x2)的值最年夜不凌驾屏幕的高度值。*这个值和Integer.Max_Value相差良多。如许我们能够把这个斜率缩小1000倍以后利用。*这是能够斜率的精度的请求的。*/privatevoidfillTriangle(intx0,inty0,intx1,inty1,intx2,inty2){inttemp,x3,y3;if(y1>y2){//包管y2>y1,便于盘算,这只是互换两个点的reference,不影响了局。temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;}if(x1==x2){x3=x1;y3=y1+1;do{g.drawLine(x0,y0,x3,y3);y3++;}while(y3<y2);}else{if(y1==y2){if(x1>x2){temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;}x3=x1;y3=y1;do{g.drawLine(x0,y0,x3,y3);x3++;}while(x3<x2);}else{intk=(y1-y2)*1000/(x1-x2);//斜率,缩小了1000倍System.out.println("kis"+k);y3=y1+1;x3=(y3-y1)*1000/k+x1;do{g.drawLine(x0,y0,x3,y3);y3++;x3=(y3-y1)*1000/k+x1;}while(y3<y2);}}}publicvoidcommandAction(Commandarg0,Displayablearg1){
}
}
这份代码没有举行三个点是不是能够构成三角形的校验。因为完成的机制是从一个点到对应的线上的点画线,以是线的端点不要利用钝角的极点,由于如许大概呈现添补不满的情形。固然,这能够在函数内办理,可是,我一时还没有找到符合的办法。
代码经由测试了。可是,我的测试大概不完美,利用之前你再测试一下。代码的效力不必忧虑,经由查验,绘图利用也许0.016秒。利用轮回100次,失掉的了局。
这个添补三角形的办法固然在思绪上是准确的,可是另有良多不敷的地方,但愿人人能够修正好,然后把修正以后的函数告知我。我也小小的“开源”一下,呵呵。
MSN:cuilichen@hotmail.com
net程序员的大部门代码都靠控件拖拽完成的,虽然java也有,但是无论从美观和速度上都没发和.net比。java程序员都是代码完成的,所以java程序员常戏称.net程序员是操作员,呵呵。 |
|