Bresenham_line_algorithm.c

/*Bresenham line algorithm: draw an line from (x1, y1) to (x2, y2) */
static void line(u_int *pic_buf, int x1, int y1, int x2, int y2)
{
    int dx = x2 - x1;
    int dy = y2 - y1;
    int inc;
    int pi;


    inc = ((dx * dy) >= 0) ? 1 : -1;
    if(abs(dx) > abs(dy)){
        if(dx < 0){
            swap(&x1, &x2);
            swap(&y1, &y2);
            dx = -dx;
            dy = -dy;
        }

        dy = (dy > 0) ? dy : -dy;
        pi = 2 * dy - dx;
        while(x1++ <= x2){
            draw_pixel(pic_buf, y1,  x1 - 1, y1, x1);
            if(pi < 0)
                pi += 2 * dy;
            else{
                y1 += inc;
                pi += 2 * (dy - dx);
            }
        }
     }else{
          if(dy < 0){
              swap(&x1, &x2);
              swap(&y1, &y2);
              dx = -dx;
              dy = -dy;
          }

          dx = (dx > 0)? dx : -dx;
          pi = 2 * dx - dy;
          while(y1++ < y2){
              draw_pixel(pic_buf,  y1 - 1, x1, y1 - 1, x1);
              if(pi < 0)
                  pi += 2 * dx;
              else{
                  x1 += inc;
                  pi += 2 *(dx - dy);
              }
          }
      }
} 


import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class Bresenham extends JPanel{ private static final long serialVersionUID = 1L; protected void paintComponent(Graphics g) { super.paintComponent(g); bresenham_1(g,10,10,200,100); //0 <= m <= 1 bresenham_2(g,0,0,100,200); //m >= 1 bresenham_3(g,0,400,200,300); //-1 <= m <= 0 bresenham_4(g,0,400,100,200); //m <= -1 } void bresenham_1(Graphics g, int xs, int ys, int xe, int ye) { int dx = xe - xs; int dy = ye - ys; int x = xs; int y = ys; int e = 2 * dy - dx; for(int i=0; i<dx; i++) { g.drawLine(x,y,x,y); if(e>=0){ y = y + 1; e = e - 2 * dx; } x = x + 1; e = e + 2 * dy; } } void bresenham_2(Graphics g, int xs, int ys, int xe, int ye) { int dx = xe - xs; int dy = ye - ys; int x = xs; int y = ys; int e = 2 * dx - dy; for(int i=0; i<dy; i++) { g.drawLine(x,y,x,y); if(e>=0){ x = x + 1; e = e - 2 * dy; } y = y + 1; e = e + 2 * dx; } } void bresenham_3(Graphics g, int xs, int ys, int xe, int ye) { int dx = xe - xs; int dy = ys - ye; int x = xs; int y = ys; int e = 2 * dy - dx; for(int i=0; i<dx; i++) { g.drawLine(x,y,x,y); if(e>=0){ y = y - 1; e = e - 2 * dx; } x = x + 1; e = e + 2 * dy; } } void bresenham_4(Graphics g, int xs, int ys, int xe, int ye) { int dx = xe - xs; int dy = ys - ye; int x = xs; int y = ys; int e = 2 * dx - dy; for(int i=0; i<dy; i++) { g.drawLine(x,y,x,y); if(e>=0){ x = x + 1; e = e - 2 * dy; } y = y - 1; e = e + 2 * dx; } } public static void main(String[] args) { JFrame frame = new JFrame("Bresenham Line Drawing Algorithm"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new Bresenham()); frame.setSize(500, 500); frame.setLocationRelativeTo(null); frame.setVisible(true);}} 修改坐标
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值