• 大小: 1KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-07
  • 语言: Java
  • 标签: 裁剪  填充  java  

资源简介

这是用java实现的多边形填充算法,是扫描线算法,按照课本上编写的,调试过,绝对没问题。

资源截图

代码片段和文件信息

import java.awt.*;
import javax.swing.*;
import java.util.*;
public class FillPloy {
public static void main(String []args){
Jframe f=new Jframe(“扫描线算法“);
MyCanvas c=new MyCanvas();
f.add(c);
f.setSize(650650);
f.setVisible(true);
f.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
}
class Edge{
int x;
double dx;
int ymax;
}
class MyCanvas extends Canvas{
Vector v[];
Edge n[]=new Edge[6];
Edge m[]=new Edge[6];
Edge t=new Edge();
    int x1x2xy;
int ijkl;
private Boolean add;
public MyCanvas(){
for(i=0;i<6;i++)
{
n[i]=new Edge();
m[i]=new Edge();
}
n[0].x=5;
n[0].dx=-3;
n[0].ymax=2;
n[1].x=5;
n[1].dx=3;
n[1].ymax=3;
n[2].x=2;
n[2].dx=0;
n[2].ymax=7;
n[3].x=11;
n[3].dx=0;
n[3].ymax=8;
n[4].x=5;
n[4].dx=2;
n[4].ymax=8;
n[5].x=5;
n[5].dx=-1.5;
n[5].ymax=7;
v=new Vector[9];
for(i=0;i<9;i++)
{
v[i]=new Vector();
}
Boolean add1=v[1].add(n[0]);
Boolean add2=v[1].add(n[1]);
Boolean add3=v[2].add(n[2]);
Boolean add4=v[3].add(n[3]);
Boolean add5=v[5].add(n[4]);
Boolean add6=v[5].add(n[5]);
k=0;
}
public void paint(Graphics g){
int flag=0;
this.setBackground(Color.white);
for(i=0;i<=11;i++)
{
x=10+50*i;
g.drawLine(x100x500);
}
for(j=0;j<=8;j++)
{
y=100+50*j;
g.drawLine(10y560y);
}
j=0;
g.setColor(Color.red);
g.drawLine(110150110400);
g.drawLine(110400260450);
g.drawLine(260450560350);
g.drawLine(560350560100);
g.drawLine(560100260250);
g.drawLine(260250110150);
if(j==0)this.repaint();
}
public void update(Graphics g){
k=0;
g.setColor(Color.blue);
for(int q=0;q<8;q++)
{
j++;
for(i=0;i m[k]=(Edge)v[j].get(i);
k++;
}
for(l=0;l for(i=l;i if(m[i].x>m[i+1].x){
  t=m[i];
  m[i]=m[i+1];
  m[i+1]=t;
 }
}
}
for(l=0;l if(m[l].x==m[l+1].x)
{
if(m[l].ymax==j&&m[l+1].ymax>j)
{
for(i=l;i {
m[i]=m[i+1];
}
k=k-1;
}
}
}
for(i=0;i {
x1=m[i].x;
x2=m[i+1].x;
while(x1<=x2)
{
x=x1*50+10-5;
y=500-j*50-5;
g.fillOval(xy1010);
x1++;
try{Thread.sleep(1000);}catch(Exception e){}
}
}
for(i=0;i {
if(m[i].ymax==j)
{
l=i;
while(l {
m[l]=m[l+1];
l++;
}
k--;
i=-1;
}
else if(m[i].ymax>j)
{
m[i].x=(int)(m[i].x+m[i].dx);
}
}
if(j==8)
break;
}
}
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2010-09-24 17:24  计算0801—1081220126赵晓森—2\
     文件        2791  2010-09-24 14:24  计算0801—1081220126赵晓森—2\FillPloy.java

评论

共有 条评论