public static Bitmap Midpoint(Bitmap img, int x1, int y1, int x2, int y2, Color cor) { Bitmap btm = new Bitmap(img); double cx = x1; double cy = y1; double rx = Math.Abs(x2 - x1); double ry = Math.Abs(y2 - y1); double x = 0; double y = ry; double d1 = Math.Pow(ry, 2) - Math.Pow(rx, 2) * ry + Math.Pow(rx, 2) / 4; double dx = 2 * Math.Pow(ry, 2) * x; double dy = 2 * Math.Pow(rx, 2) * y; while (dx < dy) { DrawEllipse.Draw(btm, (int)Math.Round(x), (int)Math.Round(y), (int)Math.Round(cx), (int)Math.Round(cy), cor); if (d1 < 0) { x++; dx += 2 * Math.Pow(ry, 2); d1 += dx + Math.Pow(ry, 2); } else { x++; y--; dx += 2 * Math.Pow(ry, 2); dy -= 2 * Math.Pow(rx, 2); d1 += dx - dy + Math.Pow(ry, 2); } } double d2 = (Math.Pow(ry, 2) * ((x + 0.5) * (x + 0.5))) + (Math.Pow(rx, 2) * ((y - 1) * (y - 1))) - Math.Pow(rx, 2) * Math.Pow(ry, 2); while (y >= 0) { DrawEllipse.Draw(btm, (int)Math.Round(x), (int)Math.Round(y), (int)Math.Round(cx), (int)Math.Round(cy), cor); if (d2 > 0) { y--; dy -= 2 * Math.Pow(rx, 2); d2 += Math.Pow(rx, 2) - dy; } else { y--; x++; dx += 2 * Math.Pow(ry, 2); dy -= 2 * Math.Pow(rx, 2); d2 += dx - dy + Math.Pow(rx, 2); } } return(btm); }
private void picBox_MouseMove(object sender, MouseEventArgs e) { if (picBox.Image != null) { toolTip.SetToolTip(picBox, "X:" + e.X + " Y:" + e.Y); } if (polyflag == true && polyfirst == false) { picBox.Image = DrawLine.DDA((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); } else { if (flag == true && picBox.Image != null && polyflag == false) { switch (this.Active) { case "Equação Real da Reta": picBox.Image = DrawLine.RealLine((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; case "DDA": picBox.Image = DrawLine.DDA((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; case "Bresenham": picBox.Image = DrawLine.Bresenham((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; case "Trigonometria": picBox.Image = DrawCircle.Trigonometry((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; case "Ponto Médio": picBox.Image = DrawCircle.Midpoint((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; case "Ponto Médio Elipse": picBox.Image = DrawEllipse.Midpoint((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; default: picBox.Image = DrawCircle.RealCircle((Bitmap)img, point.X, point.Y, e.X, e.Y, Color.Black); break; } } } }