private void CirculoPontoMedio() { int x = centro.getX(); int y = centro.getY(); int r = raio; HashSet <Tuple <int, int> > tmpPontos = new HashSet <Tuple <int, int> >(); int desvioX, desvioY, p; desvioX = x; desvioY = y; x -= desvioX; y -= desvioY; //Ponto médio x = 0; y = r; p = 1 - r; tmpPontos.Add(Tuple.Create(x, y)); tmpPontos.Add(Tuple.Create(-x, y)); tmpPontos.Add(Tuple.Create(x, -y)); tmpPontos.Add(Tuple.Create(-x, -y)); tmpPontos.Add(Tuple.Create(y, x)); tmpPontos.Add(Tuple.Create(-y, x)); tmpPontos.Add(Tuple.Create(y, -x)); tmpPontos.Add(Tuple.Create(-y, -x)); while (x < y) { x++; if (p < 0) { p += 2 * x + 3; } else { y--; p += 2 * x - 2 * y + 5; } tmpPontos.Add(Tuple.Create(x, y)); tmpPontos.Add(Tuple.Create(-x, y)); tmpPontos.Add(Tuple.Create(x, -y)); tmpPontos.Add(Tuple.Create(-x, -y)); tmpPontos.Add(Tuple.Create(y, x)); tmpPontos.Add(Tuple.Create(-y, x)); tmpPontos.Add(Tuple.Create(y, -x)); tmpPontos.Add(Tuple.Create(-y, -x)); } foreach (Tuple <int, int> t in tmpPontos) { pontos.Add(new Ponto(t.Item1 + desvioX, t.Item2 + desvioY, cor)); } }
/* * Função usada para definir um ponto. * O ponto de origem (0, 0) está no canto superior esquerdo da tela. */ public void setPonto(Ponto p) { int x = p.getX(); int y = p.getY(); if ((x < _largura && y < _altura) && (x >= 0 && y >= 0)) { _framebuffer[x, y] = p.getCor(); } }
private void ElipsePontoMedio() { int x = centro.getX(); int y = centro.getY(); int a = eixoMaior; int a2 = a * a; int b = eixoMenor; int b2 = b * b; HashSet <Tuple <int, int> > tmpPontos = new HashSet <Tuple <int, int> >(); int desvioX, desvioY; desvioX = x; desvioY = y; x -= desvioX; y -= desvioY; //Ponto médio float d1, d2; x = 0; y = b; d1 = b2 - a2 * b + a2 / 4; tmpPontos.Add(Tuple.Create(x, y)); tmpPontos.Add(Tuple.Create(x, -y)); tmpPontos.Add(Tuple.Create(-x, y)); tmpPontos.Add(Tuple.Create(-x, -y)); // Região 1 while (a2 * (y - 1 / 2) > b2 * (x + 1)) { if (d1 < 0) { d1 += b2 * (2 * x + 3); x++; } else { d1 += b2 * (2 * x + 3) + a2 * (-2 * y + 2); x++; y--; } tmpPontos.Add(Tuple.Create(x, y)); tmpPontos.Add(Tuple.Create(x, -y)); tmpPontos.Add(Tuple.Create(-x, y)); tmpPontos.Add(Tuple.Create(-x, -y)); } // Região 2 d2 = b2 * (x + 1 / 2) * (x + 1 / 2) + a2 * (y - 1) * (y - 1) - a2 * b2; while (y > 0) { if (d2 < 0) { d2 += b2 * (2 * x + 2) + a2 * (-2 * y + 3); x++; y--; } else { d2 += 2 * (-2 * y + 3); y--; } tmpPontos.Add(Tuple.Create(x, y)); tmpPontos.Add(Tuple.Create(x, -y)); tmpPontos.Add(Tuple.Create(-x, y)); tmpPontos.Add(Tuple.Create(-x, -y)); } foreach (Tuple <int, int> t in tmpPontos) { pontos.Add(new Ponto(t.Item1 + desvioX, t.Item2 + desvioY, cor)); } }
public int getYMinimo() { return(Math.Min(inicio.getY(), fim.getY())); }