dda算法画直线java_java画直线算法 DDA 计算机图形学

设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得

0818b9ca8b590ca3270a3433284dd417.png

= m =直线的斜率

(2-1)

可通过计算由x方向的增量△x引起y的改变来生成直线:

xi+1=xi+△x

(2-2)

yi+1=yi+△y=yi+△x·m

(2-3)

也可通过计算由y方向的增量△y引起x的改变来生成直线:

yi+1=yi+△y

(2-4)

xi+1=xi+△x=xi+△y/m

(2-5)

import java.awt.event.*;

import javax.swing.*;

import java.awt.*;

public class paint extends JFrame implements ActionListener {

JButton btn;

JLabel lbl1, lbl2, lbl3, lbl4;

JTextField t1, t2, t3, t4;

JPanel p1, p2, p3, p4;

public paint() {

super("DDA算法画直线");

btn = new JButton("确定");

btn.addActionListener(this);

lbl1 = new JLabel("输入起点横坐标:");

lbl2 = new JLabel("输入起点纵坐标:");

lbl3 = new JLabel("输入终点横坐标:");

lbl4 = new JLabel("输入终点纵坐标:");

t1 = new JTextField(3);

t2 = new JTextField(3);

t3 = new JTextField(3);

t4 = new JTextField(3);

t1.addActionListener(this);

t2.addActionListener(this);

t3.addActionListener(this);

t4.addActionListener(this);

p1 = new JPanel();

p1.setLayout(new GridLayout(2, 2));

p1.add(lbl1);

p1.add(t1);

p1.add(lbl2);

p1.add(t2);

p1.add(lbl3);

p1.add(t3);

p1.add(lbl4);

p1.add(t4);

this.add(p1, "South");

p2 = new JPanel();

p2.setLayout(new BorderLayout());

p2.add(btn);

btn.setActionCommand("确定");

this.add(p2, "North");

this.setBackground(Color.white);

}

public void DDAdrawline(Graphics g) {

int x0, x1, y0, y1;

String s1, s2, s3, s4;

float dx, dy, k, x,y;

s1 = t1.getText();

s2 = t2.getText();

s3 = t3.getText();

s4 = t4.getText();

x0 = Integer.parseInt(s1);

y0 = Integer.parseInt(s2);

x1 = Integer.parseInt(s3);

y1 = Integer.parseInt(s4);

dy = y1 - y0;

dx = x1 - x0;

if (dx != 0) {

k = dy / dx;

if(k<1){

y = y0;

for (int xx = x0; xx <= x1; xx++) {

g.drawString(".", xx, (int) (y + 0.5f));

y = y + k;

}

}else{

System.out.println(k+"!!!!!!!!!!!!");

x = x0;

for(int yy=y0;yy

g.drawString(".", (int)(x), yy);

int lastY = yy;

x = x + dx/dy;

}

}

} else {

for (int i = y0; i <= y1; i++) {

g.drawString(".", x0, i);

}

}

}

public void actionPerformed(ActionEvent e) {

String s = e.getActionCommand();

if (s.equals("确定")) {

Graphics g = this.getGraphics();

g.clearRect(0, 0, 500, 500);

DDAdrawline(g);

}

}

public static void main(String[] args) {

paint frame = new paint();

frame.setSize(600, 600);

frame.setLocation(450, 200);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setVisible(true);

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值