计算机图形学-简单种子填充算法-java实现

import javax.swing.JFrame;


public class FloodFill4 {
 public static void main(String args[]){
  new FloodFill4();
 }
 private TwoDimen env;
 public FloodFill4(){
  JFrame frame = new JFrame();
  env = new TwoDimen();
  frame.getContentPane().add(env);
  frame.setBounds(100, 100, 600, 600);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setResizable(false);
  frame.setVisible(true);
  int[] X = new int[] { 3, 18, 33, 15, 3 };
  int[] Y = new int[] { 15, 30, 15, 3, 15 };
  int i = 0;
  double x, y;
  double dy, dx;
  int ymin, ymax;
  for (i = 0; i < X.length - 1; i++) {
//   System.out.println(i);
   dy = Y[i + 1] - Y[i];
   if (dy != 0) {
    dx = (X[i + 1] - X[i]) / dy;
    if (dy > 0)
     x = X[i];
    else
     x = X[i + 1];
    if (Y[i] >= Y[i + 1]) {
     ymin = Y[i + 1];
     ymax = Y[i];
    } else {
     ymin = Y[i];
     ymax = Y[i + 1];
    }
    int k,j;
    k=Math.abs(X[i+1]-X[i]);
    if(Math.abs(Y[i+1]-Y[i])>k)k=Math.abs(Y[i+1]-Y[i]);
    dx=(float)(X[i+1]-X[i])/k;
    dy=(float)(Y[i+1]-Y[i])/k;
    x=(float)(X[i]);
    y=(float)(Y[i]);
    for(j=0;j<k;j++){
     if (env.isFlag((int) (x+0.5), (int) (y+0.5))) {
      env.setFlag((int) (x + 1.5), (int) (y+0.5));
     } else {
      env.setFlag((int) (x+0.5), (int) (y+0.5));
     }
     x=x+dx;
     y=y+dy;
    }
   }
  }
  fill(15,15);
 }
 private void fill(int i, int j) {
  if(!env.isFlag(i, j)&&!env.isFilled(i, j)){
   env.drawPoint(i, j);
   fill(i,j+1);
   fill(i,j-1);
   fill(i+1,j);
   fill(i-1,j);
//   fill(i+1,j+1);
//   fill(i+1,j-1);
//   fill(i-1,j+1);
//   fill(i-1,j-1);
  }
 }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值