public override void draw_DDA(DrawPixelFunc setPixel) { int dx = x1 - x0, dy = y1 - y0, steps, k; double xIncrement, yIncrement, x = x0, y = y0; if (Math.Abs(dx) > Math.Abs(dy)) { steps = Math.Abs(dx); } else { steps = Math.Abs(dy); } xIncrement = dx / (double)steps; yIncrement = dy / (double)steps; for (k = 0; k < steps; k++) { setPixel(Round(x), Round(y)); x += xIncrement; y += yIncrement; } }
public override void draw_DDA(DrawPixelFunc setPixel) { int a = halfBigAxis; int b = halfSmallAxis; int x, y; double tmp; //0 = b2x2 + a2y2 -a2b2 double xEnd = a * a / Math.Sqrt(a * a + b * b); double yEnd = b * b / Math.Sqrt(a * a + b * b); for (x = 0; x <= xEnd; x++) { tmp = (a * a * b * b - b * b * x * x) / (a * a); y = Round(Math.Sqrt(tmp)); set4pixel(setPixel, x, y); } for (y = 0; y <= yEnd; y++) { tmp = (a * a * b * b - a * a * y * y) / (b * b); x = Round(Math.Sqrt(tmp)); set4pixel(setPixel, x, y); } }
public void set4pixel(DrawPixelFunc setPixel, int x, int y) { setPixel(x0 + x, y0 + y); setPixel(x0 - x, y0 + y); setPixel(x0 + x, y0 - y); setPixel(x0 - x, y0 - y); }
public override void draw_MidPoint(DrawPixelFunc setPixel) { int x, y; x = 0; y = radius; set8pixel(setPixel, x, y); double p = 1 - radius; while (x < y) { if (p < 0) { p += 2 * x + 3; } else { p += 2 * (x - y) + 5; y--; } x++; set8pixel(setPixel, x, y); } }
public override void draw_MidPoint(DrawPixelFunc setPixel) { int a = halfBigAxis; int b = halfSmallAxis; int x, y, fx, fy, a2, b2, p; x = 0; y = b; a2 = a * a; b2 = b * b; fx = 0; fy = 2 * a2 * y; set4pixel(setPixel, x, y); p = Round(b2 - (a2 * b) + (0.25 * a2));//p=b2 - a2*b +a2/4 while (fx < fy) { x++; fx += 2 * b2; if (p < 0) { p += b2 * (2 * x + 3);//p=p + b2*(2x +3) } else { y--; p += b2 * (2 * x + 3) + a2 * (2 - 2 * y);//p=p +b2(2x +3) +a2(2-2y) fy -= 2 * a2; } set4pixel(setPixel, x, y); } p = Round(b2 * (x + 0.5) * (x + 0.5) + a2 * (y - 1) * (y - 1) - a2 * b2); // while (y > 0) { y--; fy -= 2 * a2; if (p >= 0) { p += a2 * (3 - 2 * y); //p=p +a2(3-2y) } else { x++; fx += 2 * b2; p += b2 * (2 * x + 2) + a2 * (3 - 2 * y);//p=p+ b2(2x +2) + a2(3-2y) } set4pixel(setPixel, x, y); } }
public override void draw_DDA(DrawPixelFunc setPixel) { int x, y; double xEnd = radius / Math.Sqrt(2); for (x = 0; x < xEnd; x++) { y = radius * radius - x * x; y = (int)(Math.Sqrt(y) + 0.5); set8pixel(setPixel, x, y); } }
public override void draw_Bresenham(DrawPixelFunc setPixel) { int xA = x0, yA = y0, xB = x1, yB = y1; int dx = Math.Abs(xA - xB); int dy = Math.Abs(yA - yB); int steep = (dy > dx) ? 1 : 0; if (steep == 1) { swap(ref dx, ref dy); swap(ref xA, ref yA); swap(ref xB, ref yB); } if (dx == 0 && dy == 0) { setPixel(xA, yA); return; } int p = 2 * dy - dx; int d1 = 2 * dy; int d2 = 2 * (dy - dx); int xInc = (xA < xB) ? 1 : -1; int yInc = (yA < yB) ? 1 : -1; while (xA != xB) { if (steep == 1) { setPixel(yA, xA); } else { setPixel(xA, yA); } if (p < 0) { p += d1; } else { p += d2; yA += yInc; } xA += xInc; } }
public override void draw_MidPoint(DrawPixelFunc setPixel) { int a = realAxis; int b = virtualAxis; int p = 0; int x = a; int y = 0; int a2 = a * a; int b2 = b * b; p = (int)(1.0 * b2 / 4 + a * b2 - a2); int end = (int)((a <= b ? height : b * b / Math.Sqrt(a2 - b2))); while (y < end) { set4pixel(setPixel, x, y); if (p < 0) { p += (2 * x + 2) * b2 - (2 * y + 3) * a2; x++; } else { p -= a2 * (2 * y + 3); } y++; } p = b2 - a2 / 4; while (x < width) { set4pixel(setPixel, x, y); if (p < 0) { p += (x + 1) * 2 * b2; } else { p += (x + 1) * 2 * b2 - (2 * y + 2) * a2; y++; } x++; } }
public override void draw_DDA(DrawPixelFunc setPixel) { double a = hs_a; if (hs_a < 0) { a = -a; } int x, y; double xEnd = 1 / (2 * a); double yStart = 1 / (4 * a); for (x = 0; x < xEnd; x++) { y = (int)(a * x * x + 0.5); if (hs_a < 0) { set2PixelWithANegative(setPixel, x, y); } else { set2Pixel(setPixel, x, y); } } for (y = (int)yStart; y <= height; y++) { x = (int)(Math.Sqrt(y / a) + 0.5); if (hs_a < 0) { set2PixelWithANegative(setPixel, x, y); } else { set2Pixel(setPixel, x, y); } } }
public override void draw_DDA(DrawPixelFunc setPixel) { int a = realAxis; int b = virtualAxis; int x, y; double xStart = (a > b) ? a * a / Math.Sqrt(a * a - b * b) : a * a / Math.Sqrt(b * b - a * a); double yEnd = (a > b) ? b * b / Math.Sqrt(a * a - b * b) : b * b / Math.Sqrt(b * b - a * a); double tmp; for (y = 0; y <= yEnd; y++) { tmp = (a * a * y * y + a * a * b * b) / (b * b); x = (int)(Math.Sqrt(tmp) + 0.5); set4pixel(setPixel, x, y); } for (x = (int)xStart; x <= width; x++) { tmp = (b * b * x * x - a * a * b * b) / (a * a); y = (int)(Math.Sqrt(tmp) + 0.5); set4pixel(setPixel, x, y); } }
public override void draw_MidPoint(DrawPixelFunc setPixel) { int a, b, c, xA = x0, yA = y0, xB = x1, yB = y1, p; int steep = (Math.Abs(y1 - y0) > Math.Abs(x1 - x0)) ? 1 : 0; if (steep == 1) { swap(ref xA, ref yA); swap(ref xB, ref yB); } a = yB - yA; b = -(xB - xA); c = xB * yA - xA * yB; int xInc = (xA < xB) ? 1 : -1; int yInc = (yA < yB) ? 1 : -1; while (xA != xB) { if (steep == 1) { setPixel(yA, xA); } else { setPixel(xA, yA); } xA += xInc; if ((2 * a * xA + 2 * b * yA + 2 * c + 2 * a + b) >= 0) { yA += yInc; } } }
public abstract void draw_MidPoint(DrawPixelFunc func);
public abstract void draw_DDA(DrawPixelFunc func);
public override void draw_Bresenham(DrawPixelFunc func) { throw new NotImplementedException(); }
public abstract void draw_Bresenham(DrawPixelFunc func);
public override void draw_MidPoint(DrawPixelFunc setPixel) { double a = hs_a; int isNegative = 0; if (a == 0) { return; } if (a < 0) { isNegative = 1; a = -a; } int x = 0, y = 0; double f = 2 * a - 1; set2Pixel(setPixel, x, y); while (2 * a * x < 1) { if (f < 0) { f = f + a * (2 * x + 3); } else { f = f + a * (2 * x + 3) - 1; y++; } x++; if (isNegative == 0) { set2Pixel(setPixel, x, y); } else { set2PixelWithANegative(setPixel, x, y); } } x = round(0.5 / a); y = round(0.25 / a); f = a - 2; set2Pixel(setPixel, x, y); while (y <= height) { if (f < 0) { f = f + 2 * a * (x + 1) - 1; x++; } else { f--; } y++; if (isNegative == 0) { set2Pixel(setPixel, x, y); } else { set2PixelWithANegative(setPixel, x, y); } } }
public void set2PixelWithANegative(DrawPixelFunc setPixel, int x, int y) { setPixel(x0 + x, y0 - y); setPixel(x0 - x, y0 - y); }