Implementation of Digital Differential Analyzer (DDL) algorithm in java - I@Tech

Wednesday, January 24, 2018

Implementation of Digital Differential Analyzer (DDL) algorithm in java



Algorithm:
Step 1: Take input two end points (x1, y1) and (x2, y2)
Step 2:Calculate m = dy/dx = (y2-y1)/(x2-x1)
Step 3:Repeat step 4 and 5 while ( x1 <= x2)




Step 4: Color the pixel (x1,y1)
Step 5: if ( m < 1)
x1 = x1 + 1
y1 = y1 + m
else if ( m > 1)
x1 = x1 + (1/m)
y1  = y1 + 1
else
x1 = x1 + 1
y1 = y1 + 1
Source Code:
package today;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Scanner;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class DrawLineAlgorithm {
    public static void main(String[] args) {
        double x1,y1,x2,y2;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter starting co-ordinate:");
        x1 = input.nextDouble();
        y1 = input.nextDouble();
         
        System.out.println("Enter ending co-ordinate:");
        x2 = input.nextDouble();
        y2 = input.nextDouble();
        input.close();
        JFrame frame = new JFrame("My Frame");
        NewClass nc = new NewClass(x1,y1,x2,y2);
        nc.setBackground(Color.WHITE);
        frame.add(nc);
        frame.setSize(500, 500);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
         
         
         
    }
}
class NewClass extends JPanel{
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    double x1,y1,x2,y2;
    public NewClass(double x1,double y1,double x2,double y2) {
        this.x1 = x1;
        this.y1 = y1;
        this.x2 = x2;
        this.y2 = y2;
    }
     
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        lineDraw(x1, y1, x2, y2,g);
         
         
         
    }
    public void lineDraw(double x1,double y1,double x2,double y2,Graphics g){
         
        double m;
        m = (y2-y1)/(x2-x1);   
         
        for(int i=0; x1<=x2; i++){
            g.setColor(Color.RED);
            g.fillOval((int)x1, (int)y1, 5, 5);    
            if(m<1){
                x1 = x1 + 1;
                y1 = y1 + m;               
                 
                g.fillOval((int)x1, (int)y1, 5, 5);                    
            }else if(m>1){
                x1 = x1 + (1/m);
                y1 = y1 + 1;
                g.fillOval((int)x1, (int)y1, 5, 5);
            }else{
                x1 = x1 + 1;
                y1 = y1 + 1;
                 
                g.fillOval((int)x1, (int)y1, 5, 5);
            }
             
        }
    }
     
}

No comments:

Post a Comment