⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linedx.java

📁 实现二维基本图元直线段生成的基本算法(DDA
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    /* while */
  }
  /* mid pointine */

//////////////////////////////////////////////////////////////////////////////
  public void InterBresenhamlineX(int x0, int y0, int x1, int y1,
                                  Graphics g, int w1, int w2) {
    int x, y, dx, dy, e, j = 0;
    g.setColor(ForeColor);
    boolean bg;
    if (y1 > y0) {
      bg = true;
    }
    else {
      bg = false;

    }
    if (bg) {
      dy = y1 - y0;
    }
    else {
      dy = y0 - y1;

    }
    dx = x1 - x0;

    e = -dx;
    x = x0;
    y = y0;
    for (int i = 0; i <= dx; i++) {
      if (j == 8) {
        j = 0;
      }
      if ('1' == sLineStyle[LineStyle].charAt(j)) {
        for (int w = w2; w < w1; w++) {
          g.drawLine(x, y + w, x, y + w);
        }
      }
      j++;
      x++;
      e = e + 2 * dy;
      if (e >= 0) {
        if (bg) {
          y++;
        }
        else {
          y--;

        }
        e = e - 2 * dx;
      }
    }
  }

  //////////////////////////////////////////////////////////////////////////////
  public void InterBresenhamlineY(int x0, int y0, int x1, int y1,
                                  Graphics g, int w1, int w2) {
    int x, y, dx, dy, e, j = 0;
    g.setColor(ForeColor);
    boolean bg;
    if (x1 > x0) {
      bg = true;
    }
    else {
      bg = false;

    }
    if (bg) {
      dy = x1 - x0;
    }
    else {
      dy = x0 - x1;

    }
    dx = y1 - y0;

    e = -dx;
    x = x0;
    y = y0;
    for (int i = 0; i <= dx; i++) {
      if (j == 8) {
        j = 0;
      }
      if ('1' == sLineStyle[LineStyle].charAt(j)) {
        for (int w = w2; w < w1; w++) {
          g.drawLine(x + w, y, x + w, y);
        }
      }
      j++;

      y++;
      e = e + 2 * dy;
      if (e >= 0) {
        if (bg) {
          x++;
        }
        else {
          x--;

        }
        e = e - 2 * dx;
      }
    }
  }

///////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
  public void LineDDAXDemo(int x0, int y0, int x1, int y1, Graphics g)
  /* 假定x0<x1,-1<=k<=1 */
  {
    int x, t, w;
    float dx, dy, y, k;
    int tmp = 2 * DemoWidth;
    g.setColor(ForeColor);
    dx = x1 - x0;
    dy = y1 - y0;
    k = (dy / dx) * tmp;
    y = y0;
    ////////////////////////////////////
    for (x = x0; x <= x1; x = x + tmp) {
      ////////////////////////////////////////////
      //注意步长???????????
      t = Math.round(y);

      g.fillRect(x, t, DemoWidth, DemoWidth);
      y += k;
    }
  }

///////////////////////////////////////////////////////////////////////////////
  public void LineDDAYDemo(int x0, int y0, int x1, int y1, Graphics g)
  /* 假定-1<=1/k<=1 */
  {
    int y, t;
    float dx, dy, x, k;
    int tmp = 2 * DemoWidth;
    g.setColor(ForeColor);
    dx = x1 - x0;
    dy = y1 - y0;
    k = (dx / dy) * tmp;
    x = x0;

    //////////////////////////////////////////////////
    for (y = y0; y <= y1; y = y + tmp) {
      ////////////////////////////////////////////
      //注意步长???????????
      t = Math.round(x);

      g.fillRect(t, y, DemoWidth, DemoWidth);

      x += k;
    }
  }

////////////////////////////////////////////////////////////////////////////
  public void MidpointineXDemo(int x0, int y0, int x1, int y1,
                               Graphics g) {
    int a, b, d1, d2, d, x, y;
    int tmp = 2 * DemoWidth;
    g.setColor(ForeColor);
    boolean bg;
    if (y1 > y0) {
      bg = false;
    }
    else {
      bg = true;

    }
    if (bg) {
      a = y1 - y0;
    }
    else {
      a = y0 - y1;

    }
    b = x0 - x1;
    d = 2 * a - b;
    d2 = 2 * (a - b);
    d1 = 2 * a;
    x = x0;
    y = y0;

    g.fillRect(x, y, DemoWidth, DemoWidth);
    while (x < x1) {
      x += tmp;
      if (d < 0) {
        if (bg) {
          y -= tmp;
        }
        else {
          y += tmp;
        }
        d += d2;
      }
      else {
        d += d1;
      }
      g.fillRect(x, y, DemoWidth, DemoWidth);

    }
    /* while */
  }
  /* mid pointine */

  ////////////////////////////////////////////////////////////////////////////
  public void MidpointineYDemo(int x0, int y0, int x1, int y1,
                               Graphics g) {
    int a, b, d1, d2, d, x, y;
    g.setColor(ForeColor);
    int tmp = 2 * DemoWidth;
    boolean bg;
    if (x1 > x0) {
      bg = false;
    }
    else {
      bg = true;

    }
    if (bg) {
      a = x1 - x0;
    }
    else {
      a = x0 - x1;

    }
    b = y0 - y1;
    d = 2 * a - b;
    d2 = 2 * (a - b);
    d1 = 2 * a;
    x = x0;
    y = y0;
    g.fillRect(x, y, DemoWidth, DemoWidth);

    while (y < y1) {
      y += tmp;
      if (d < 0) {
        if (bg) {
          x -= tmp; //x--;
        }
        else {
          x += tmp; //x++;
        }
        d += d2;
      }
      else {
        d += d1;
      }
      g.fillRect(x, y, DemoWidth, DemoWidth);

    }

  }
  /* mid pointine */

//////////////////////////////////////////////////////////////////////////////
  public void InterBresenhamlineXDemo(int x0, int y0, int x1, int y1,
                                      Graphics g) {
    int x, y, dx, dy, e;
    g.setColor(ForeColor);
    int tmp = 2 * DemoWidth;
    boolean bg;
    if (y1 > y0) {
      bg = true;
    }
    else {
      bg = false;

    }
    if (bg) {
      dy = y1 - y0;
    }
    else {
      dy = y0 - y1;

    }
    dx = x1 - x0;

    e = -dx;
    x = x0;
    y = y0;
    for (int i = 0; i <= dx; i += tmp) {
      g.fillRect(x, y, DemoWidth, DemoWidth);
      x += tmp;
      e = e + 2 * dy;
      if (e >= 0) {
        if (bg) {
          y += tmp;
        }
        else {
          y -= tmp;

        }
        e = e - 2 * dx;
      }
    }
  }

  //////////////////////////////////////////////////////////////////////////////
  public void InterBresenhamlineYDemo(int x0, int y0, int x1, int y1,
                                      Graphics g) {
    int x, y, dx, dy, e;
    g.setColor(ForeColor);
    int tmp = 2 * DemoWidth;
    boolean bg;
    if (x1 > x0) {
      bg = true;
    }
    else {
      bg = false;

    }
    if (bg) {
      dy = x1 - x0;
    }
    else {
      dy = x0 - x1;

    }
    dx = y1 - y0;

    e = -dx;
    x = x0;
    y = y0;
    for (int i = 0; i <= dx; i += tmp) {
      g.fillRect(x, y, DemoWidth, DemoWidth);
      y += tmp;
      e = e + 2 * dy;
      if (e >= 0) {
        if (bg) {
          x += tmp;
        }
        else {
          x -= tmp;

        }
        e = e - 2 * dx;
      }
    }
  }
////////////////////////////////////////////////////////////////////////////////
  /////////////////////////////////////////////////////////////////////////////////
   public void scale(double sx, double sy) {
     epoint.x = (int)(epoint.x*sx); spoint.x = (int)(spoint.x*sx);
     epoint.y = (int)(epoint.y*sy); spoint.y = (int)(spoint.y*sy);
   }

   public void rotate(double theta, int x,int y) {
     double c,s,a,b;
     int oldx,oldy;
     c = Math.cos(theta);     s = Math.sin(theta);
     a = x*(1-c)+y*s; b = y*(1-c)-x*s;

     oldx = epoint.x; oldy = epoint.y;
     epoint.x = (int)(oldx*c-oldy*s+a);
     epoint.y = (int)(oldx*s+oldy*c+b);

     oldx = spoint.x; oldy = spoint.y;
     spoint.x = (int)(oldx*c-oldy*s+a);
     spoint.y = (int)(oldx*s+oldy*c+b);

   }

   public void translate(int x, int y){
     epoint.x += x; spoint.x += x;
     epoint.y += y; spoint.y += y;
   }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -