3角形填充,任意凸多边形填充 |
| 作者:不详 来源:本站整理 发布时间:2005-11-24 16:49:55 |
|
//2005-11-7 //L.S import java.lang.*; import javax.microedition.lcdui.*; import java.util.*; import javax.microedition.rms.*; import java.io.*; //import com.nokia.mid.ui.*; class MainPit extends Canvas implements Runnable { Graphics gb; Image bufImg; private int nWidth = getWidth(); private int nHeight = getHeight(); public MainPit() { try{ bufImg = Image.createImage(nWidth,nHeight); }catch(Exception e){System.out.println(e+" createImage");} gb = bufImg.getGraphics(); } public void paint(Graphics g) { g.drawImage(bufImg,0,0,0); } 三角形填充 不考虑效率问题,每个定点作为x0,y0填充1次为佳 或者一个点可以考虑通过以x轴和以y轴为基础分别刷一遍。 private void fillTriangle(int x0, int y0, int x1,int y1, int x2,int y2) { if(x1 > x2){ int tempx = x1; int tempy = y1; x1 = x2; y1 = y2; x2 = tempx; y2 = tempy; } for(int i = x1; i<= x2; i++) { int xe = i; int ye = (y2-y1)*(xe - x1)/(x2-x1)+y1; gb.setColor(0x00ff0000); gb.drawLine(x0,y0,xe,ye); } } nodes,为节点存储数组,要求为凸多边形,同样,以每个点为基础节点刷一次,效果好多。 private void fillPolygon(int nodes[][])//以0点为基础绘制 { int sideNum = nodes.length; for(int i = 0; i < sideNum; i++){ for(int j = i+1; j < sideNum - 1; j++){ fillTriangle(nodes[0],nodes[1], nodes[j][0],nodes[j][1], nodes[j+1][0],nodes[j+1][1]); } } for(int i = 0; i < sideNum; i++){ gb.setColor(0x0000ff00); gb.fillArc(nodes[0] - 10, nodes[1] - 10, 20,20,0,360); } } int a = 0; //多边形节点数组 //限制位凸多边形 int s[][] = { {10,100}, {40,70}, {100,20}, {140,40}, {200,90}, {150,170}, {110,200}, {70,190} }; public void run() { gb.setColor(0x00ffffff); gb.fillRect(0,0,nWidth,nHeight); fillPolygon(s); repaint(); } private void pause(long t) { try{Thread.sleep(t);}catch(Exception e){} } public void keyPressed(int keyCode) { } } |
| [] [返回上一页] [打 印] |
|
文章评论 |
