DDA算法和Bresenham算法生成直線

public class DDA {
    public static void main(String[] args)
    {
        System.out.println("DDA:");
        DDALine(1,2,12,3);
        System.out.println("Bresenhem:");
        BresenhamLine(4,8,12,12);
    }
    public static void DDALine(int x1,int y1,int x2,int y2)
    {
        float dx,dy,MetaDelta,step;
        step = 0;
        float x=x1;
        float y=y1;
        MetaDelta=(Math.abs(x1-x2)>Math.abs(y1-y2))?Math.abs(x1-x2):Math.abs(y1-y2);
        dx=Math.abs(x1-x2)/MetaDelta;
        dy=Math.abs(y1-y2)/MetaDelta;
        System.out.println(dx+" "+dy);
        while(step<=MetaDelta)
        {
            System.out.println(Math.round(x)+" "+Math.round(y));
            x+=dx;
            y+=dy;
            step++;

        }
    }

    public static void BresenhamLine(int x1,int y1,int x2,int y2)
    {
        int d,y,x,delta1,delta2;
        x=x1;
        y=y1;
        d=(y2-y1)*2-(x2-x1);
        delta1=(y2-y1)*2-2*  (x2-x1);
        delta2=(y2-y1)*2;
        while(x<=x2) 
        {
            System.out.println(x+" "+y);
            x++;
            if(d>0)
            {
                d+=delta1;
                y++;
            }
            else 
            {
                d+=delta2;
            }
        }

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章