WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章J2ME技术程序开发3角形填充,任意凸多边形填充

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)
{

}

}
[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码