Exemple #1
0
        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));
            }
        }
Exemple #2
0
        /*
         * 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();
            }
        }
Exemple #3
0
        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));
            }
        }
Exemple #4
0
 public int getYMinimo()
 {
     return(Math.Min(inicio.getY(), fim.getY()));
 }