计算机图形学-边缘填充算法-java实现

import javax.swing.JFrame;

public class EdgeFill {

 public static void main(String args[]) {
  // A(3,3)B(6,20)C(15,18)D(20,3)
  // AB BD AC CD
  new EdgeFill();
 }

 private TwoDimen env;

 public EdgeFill() {
  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, 6, 20, 15 };
  int[] y = new int[] { 3, 20, 3, 18 };
  for (int i = 0; i < x.length; i++) {
   if (i < x.length - 1)
    edgeFillOnce(x[i], y[i], x[i + 1], y[i + 1]);
   else
    edgeFillOnce(x[i], y[i], x[0], y[0]);
  }
 }

 private void edgeFillOnce(int x1, int y1, int x2, int y2) {
  int k, i, j;
  float x, y, dx, dy;
  k = Math.abs(x2 - x1);
  if (Math.abs(y2 - y1) > k) {
   k = Math.abs(y2 - y1);
  }
  dx = (float) (x2 - x1) / k;
  dy = (float) (y2 - y1) / k;
  x = (float) x1;
  y = (float) y1;
  for (i = 0; i < k+1; i++) {
   // env.drawPoint((int)(x+0.5), (int)(y+0.5));
   for (j = (int) (x + 0.5); j < env.getMaxX(); j++) {
    if (!env.isFilled(j, (int) (y + 0.5)))
     env.drawPoint(j, (int) (y + 0.5));
    else
     env.cleanPoint(j, (int) (y + 0.5));
   }
   x = x + dx;
   y = y + dy;
  }
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值