java画直线算法 DDA 计算机图形学
来源:互联网 发布:免签约php发卡平台 编辑:程序博客网 时间:2024/05/17 09:04
设(x1,y1)和(x2,y2)分别为所求直线的起点和终点坐标,由直线的微分方程得
= 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<y1;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);}}
- java画直线算法 DDA 计算机图形学
- 图形学算法--DDA画直线
- 计算机图形学—DDA直线生成算法
- 计算机图形学----DDA、Bresenham直线算法
- 计算机图形学——生成直线的DDA算法
- DDA算法画直线
- DDA画直线算法
- 计算机图形学 学习笔记(一):光栅图形学算法:直线扫描算法(DDA,中点画线算法,Bresenham算法)
- 《计算机图形学》实验一:利用OpenGL实现直线光栅化的DDA算法
- 【计算机图形学】DDA算法和Bresenham算法
- 计算机图形学-----画直线
- 计算机图形学-----画直线
- 光栅图形学之直线段扫描算法(DDA)
- 计算机图形学之DDA画线算法Bresenham算法程序
- 计算机图形学 -- 画线算法 [DDA] [中点画线] [Bresenham]
- 计算机图形学作业——DDA算法实现
- 计算机图形学:3种画直线算法(转)
- DDA算法画直线(VC++)
- DOS命令之mem
- jsfl 批量设置bitmap的链接类
- 获得json数据的id或者说是key
- java.lang.OutOfMemoryError: GC overhead limit exceeded解决办法
- 黑马程序员-----单例设计模式
- java画直线算法 DDA 计算机图形学
- 编程经典书籍
- Java内存泄露缘由及防范
- Win32管道
- oracle 存储过程 基础
- [OOAD]面向对象分析与设计之类图学习总结
- Linux下mysql表名不区分大小写设置
- 教大家认识unix系统的hosts文件【系统收藏:xitongshoucang】
- Java调用天气预报调用代码