计算机图形学之绘制椭圆

参考学习了一些前辈的代码,总结了以下这个,感谢前人栽树,同时欢迎交流。

整个画圆利用了椭圆的四对称性,故只需画出四分之一椭圆就可利用对称性就可以画出整个椭圆。

  • 专门写了一个函数来画椭圆的点,其中(x0,y0)为椭圆圆心坐标,根据点(x,y)来画出其四对称点,DrawPixel()为绘制点的函数。
function DrawEclipsePoint(x0, y0, x, y, color) {
    DrawPixel(x0 + x, y0 + y, color);
    DrawPixel(x0 - x, y0 + y, color);
    DrawPixel(x0 + x, y0 - y, color);
    DrawPixel(x0 - x, y0 - y, color);
}
  • 中点画椭圆算法
 function MiddlePiontEclipse(x0, y0, a, b, color) {
     //alert("dre eclipse");
     var a2 = a * a, b2 = b * b;
     var d2, d1 = b2 + a2 * (0.25 - b);
     var x = 0, y = b;
     DrawEclipsePoint(x0, y0, x, y, color);

     //在上面的部分,|k|<1
     while (b2 * (x + 1) < a2 * (y - 0.5)) {
          if (d1 < 0)
             d1 += b2 * (2 * x + 3);
          else {
             d1 += b2 * (2 * x + 3) + a2 * (2 - 2 * y); 
             y--;
          }
          x++;
          DrawEclipsePoint(x0, y0, x, y, color);
      }

      //画在下面的部分,|k|>1
      d2 = Math.sqrt(b * (x + 0.5) + a * (y - 1)) - a * b;
      while (y > 0) {
           if (d2 < 0) {
               d2 += b2 * (2 * x + 2) + a2 * (3 - 2 * y);
               x++;
            }
           else { 
               d2 += a2 * (3 - 2 * y); }
           y--;
           DrawEclipsePoint(x0, y0, x, y, color);
      }
}

 

你可能感兴趣的:(Web)