Esempio n. 1
0
        // Calcule a projeção de um polígono em um eixo e retorne-o como um intervalo [min, max]
        public void ProjecaoPoligono(Eixos global_eixo, Objeto2D poligono, ref float min, ref float max)
        {
            // Para projetar um ponto em um eixo, use o produto escalar
            float d = global_eixo.Produto(poligono.Vertices[0].Global);

            min = d;
            max = d;
            for (int i = 0; i < poligono.Vertices.Count; i++)
            {
                d = poligono.Vertices[i].Global.Produto(global_eixo);
                if (d < min)
                {
                    min = d;
                }
                else
                {
                    if (d > max)
                    {
                        max = d;
                    }
                }
            }
        }
Esempio n. 2
0
        // desenha o número em uma face do dado
        private void desenhaNumeroDado(int numero, Face face)
        {
            // salva em quantas colunas os círculos aparecem para cada número (o número é indicado pelo índice)
            int[] intervaloA = new int[6] {
                2, 4, 6, 4, 6, 4
            };
            int[] intervaloB = new int[6] {
                2, 4, 6, 4, 6, 6
            };

            Eixos   eixos     = Eixos.X_Y;
            Ponto4D ptoCentro = null;
            Circulo c;
            double  somarA = 0;
            double  somarB = 0;

            for (int i = 0; i <= numero; i++)
            {
                // adiciona o ponto central do círculo de acordo com a face
                switch (face)
                {
                case Face.CIMA:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[2].Y + 0.01, base.pontosLista[0].Z - tamanhoDado / intervaloB[numero] - somarB);
                    eixos     = Eixos.X_Z;
                    break;

                case Face.BAIXO:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y - 0.01, base.pontosLista[0].Z - tamanhoDado / intervaloB[numero] - somarB);
                    eixos     = Eixos.X_Z;
                    break;

                case Face.FRENTE:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[0].Z + 0.01);
                    break;

                case Face.FUNDO:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X + tamanhoDado / intervaloA[numero] + somarA, base.pontosLista[0].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[4].Z - 0.01);
                    break;

                case Face.DIREITA:
                    ptoCentro = new Ponto4D(base.pontosLista[1].X + 0.01, base.pontosLista[1].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[1].Z - tamanhoDado / intervaloA[numero] - somarA);
                    eixos     = Eixos.Y_Z;
                    break;

                case Face.ESQUERDA:
                    ptoCentro = new Ponto4D(base.pontosLista[0].X - 0.01, base.pontosLista[4].Y + tamanhoDado / intervaloB[numero] + somarB, base.pontosLista[4].Z + tamanhoDado / intervaloA[numero] + somarA);
                    eixos     = Eixos.Y_Z;
                    break;
                }

                // altera os valores que devem ser somados nas coordenadas do ponto central do próximo círculo
                if (((numero == 2 || numero == 4) && (i == 0 || i == 1)) ||
                    ((numero == 1 || numero == 3 || numero == 5) && i == 0))

                {
                    somarA += 2 * (tamanhoDado / intervaloA[numero]);
                    somarB += 2 * (tamanhoDado / intervaloB[numero]);
                }
                else if ((numero == 4 && i == 2) ||
                         ((numero == 3 || numero == 5) && i == 1))
                {
                    somarA = 0;
                }
                else if (numero == 4 && i == 3)
                {
                    somarA = 4 * (tamanhoDado / intervaloA[numero]);
                    somarB = 0;
                }
                else if ((numero == 3 || numero == 5) && i == 2)
                {
                    somarA = 2 * (tamanhoDado / intervaloA[numero]);
                    somarB = 0;
                }
                else if (numero == 5 && i == 3)
                {
                    somarA = 0;
                    somarB = 4 * (tamanhoDado / intervaloB[numero]);
                }
                else if (numero == 5 && i == 4)
                {
                    somarA = 2 * (tamanhoDado / intervaloA[numero]);
                }

                // adiciona o círculo
                c = new Circulo(Utilitario.charProximo(), this, 15, tamanhoDado / 8, ptoCentro, eixos);
                c.ObjetoCor.CorR = 0; c.ObjetoCor.CorG = 0; c.ObjetoCor.CorB = 0;
                c.PrimitivaTipo  = PrimitiveType.TriangleStrip;
            }
        }
Esempio n. 3
0
        public Circulo(char rotulo, Objeto paiRef, int qntPontos, double raio, Ponto4D centro, Eixos eixos) : base(rotulo, paiRef)
        {
            this.qntPontos = qntPontos;
            this.raio      = raio;

            Ponto4D p    = new Ponto4D();
            Ponto4D q    = new Ponto4D();
            double  ang  = 360 / qntPontos;
            int     cont = 0;

            for (int i = 0; i < qntPontos; i++)
            {
                if (cont == 1)
                {
                    q = base.PontosUltimo();
                    base.PontosAdicionar(new Ponto4D(centro.X, centro.Y, centro.Z));
                }

                p = Matematica.GerarPtosCirculo(ang * i, raio);
                switch (eixos)
                {
                case Eixos.X_Y:
                    base.PontosAdicionar(new Ponto4D(p.X + centro.X, p.Y + centro.Y, centro.Z));
                    break;

                case Eixos.X_Z:
                    base.PontosAdicionar(new Ponto4D(p.X + centro.X, centro.Y, p.Y + centro.Z));
                    break;

                case Eixos.Y_Z:
                    base.PontosAdicionar(new Ponto4D(centro.X, p.X + centro.Y, p.Y + centro.Z));
                    break;
                }
                cont++;

                if (cont == 2)
                {
                    p = base.PontosUltimo();
                    base.PontosAdicionar(new Ponto4D(q.X, q.Y, q.Z));
                    base.PontosAdicionar(new Ponto4D(p.X, p.Y, p.Z));
                    cont = 0;
                }
            }
        }
Esempio n. 4
0
    public void MostraCaixas(Eixos eixo, int n)
    {
        if (eixo == Eixos.X)
        {
            for (int y = min.y; y < max.y; y++)
            {
                for (int z = min.z; z < max.z; z++)
                {
                    //Debug.Log(new Vector3Int(n, y, z));
                    MostraCaixa(matrizCaixas[n][y][z]);
                }
            }

            if (n == min.x - 1)
            {
                min.x--;
            }
            else
            {
                max.x++;
            }
        }
        else if (eixo == Eixos.Y)
        {
            for (int x = min.x; x < max.x; x++)
            {
                for (int z = min.z; z < max.z; z++)
                {
                    //Debug.Log(new Vector3Int(x, n, z));
                    MostraCaixa(matrizCaixas[x][n][z]);
                }
            }

            if (n == min.y - 1)
            {
                min.y--;
            }
            else
            {
                max.y++;
            }
        }
        else
        {
            for (int x = min.x; x < max.x; x++)
            {
                for (int y = min.y; y < max.y; y++)
                {
                    //Debug.Log(new Vector3Int(x, y, n));
                    MostraCaixa(matrizCaixas[x][y][n]);
                }
            }

            if (n == min.z - 1)
            {
                min.z--;
            }
            else
            {
                max.z++;
            }
        }
    }