Ejemplo n.º 1
0
        private Ponto4D gerarPonto(Ponto4D A, Ponto4D B, double t)
        {
            var xR = A.X + (B.X - A.X) * t;
            var yR = A.Y + (B.Y - A.Y) * t;

            return(new Ponto4D(xR, yR));
        }
        public void Desenhar()
        {
            GL.PointSize(10);

            Ponto4D ultimoPonto = null;

            for (var i = 0; i < this.pontos.Count; i++)
            {
                Ponto4D ponto = this.pontos[i];

                GL.Begin(PrimitiveType.Points);
                GL.Color3(i == this.pontoSelecionado ? Color.Red : Color.Black);
                GL.Vertex2(ponto.X, ponto.Y);
                GL.End();

                if (ultimoPonto != null)
                {
                    segReta = new SegReta($"{i}", new Ponto4D(ultimoPonto.X, ultimoPonto.Y), new Ponto4D(ponto.X, ponto.Y), Color.Cyan, 3);
                    segReta.Desenhar();
                }

                ultimoPonto = ponto;
            }

            this.DesenharSpline();
        }
        public void MoverPontoDeControle(Key key)
        {
            double deslocamentoX = 0;
            double deslocamentoY = 0;

            if (Key.C.Equals(key))
            {
                deslocamentoY = 1;
            }
            if (Key.B.Equals(key))
            {
                deslocamentoY = -1;
            }
            if (Key.E.Equals(key))
            {
                deslocamentoX = -1;
            }
            if (Key.D.Equals(key))
            {
                deslocamentoX = 1;
            }

            Ponto4D ponto = this.ObterPontoSelecionado();

            ponto.X = ponto.X + deslocamentoX;
            ponto.Y = ponto.Y + deslocamentoY;

            this.pontosSpline = ObterSpline();
        }
Ejemplo n.º 4
0
 public Retangulo(string rotulo, Ponto4D ptoInfEsq, Ponto4D ptoSupDir) : base(rotulo)
 {
     this.ptoInfEsq = ptoInfEsq;
     this.ptoSupDir = ptoSupDir;
     GerarPtosRetangulo();
     base.PontosAdicionar(ptoInfEsq);
     base.PontosAdicionar(new Ponto4D(ptoSupDir.X, ptoInfEsq.Y));
 }
Ejemplo n.º 5
0
        private void DesenharSegReta(Ponto4D ponto1, Ponto4D ponto2, Color cor)
        {
            SegReta segReta1 = new SegReta("SR", null, ponto1, ponto2);

            segReta1.PrimitivaTamanho = 5;
            segReta1.ObjetoCor.CorR   = cor.R; segReta1.ObjetoCor.CorG = cor.G; segReta1.ObjetoCor.CorB = cor.B;
            objetosLista.Add(segReta1);
        }
Ejemplo n.º 6
0
        private void DesenharCirculo(Ponto4D pontoCentral, int raio, Color cor, int tamanho, int pontos = 72, PrimitiveType primitivo = PrimitiveType.Points)
        {
            Circulo circulo = new Circulo("C", null, pontoCentral, raio, pontos, primitivo);

            circulo.ObjetoCor.CorR   = cor.R; circulo.ObjetoCor.CorG = cor.G; circulo.ObjetoCor.CorB = cor.B;
            circulo.PrimitivaTamanho = tamanho;
            objetosLista.Add(circulo);
        }
 public SegReta(string rotulo, Ponto4D ponto, Ponto4D ponto2, Color cor, float primitivaTamanho, int angulo = 0) : base(rotulo, cor, primitivaTamanho)
 {
     matematica = new Matematica();
     base.PontosAdicionar(ponto);
     base.PontosAdicionar(ponto2);
     this._angulo = angulo;
     this._raio   = 100;
 }
Ejemplo n.º 8
0
 private void SetaValoresIniciais()
 {
     qtdPontos = 5;
     ponto     = pontos.A;
     A         = new Ponto4D(x: -100, y: -100);
     B         = new Ponto4D(x: -100, y: 100);
     C         = new Ponto4D(x: 100, y: 100);
     D         = new Ponto4D(x: 100, y: -100);
 }
 public SegReta(string rotulo, Ponto4D ponto, Color cor, float primitivaTamanho, int angulo = 0) : base(rotulo, cor, primitivaTamanho)
 {
     this.ponto   = ponto;
     this._angulo = angulo;
     this._raio   = 100;
     matematica   = new Matematica();
     ponto2       = matematica.GerarPtosCirculo(angulo, _raio, ponto);
     base.PontosAdicionar(ponto);
     base.PontosAdicionar(ponto2);
 }
Ejemplo n.º 10
0
        public void CameraTerra()
        {
            Ponto4D         centro = terra.GetBBox().obterCentro;
            Transformacao4D t      = terra.GetMatriz();

            centro = t.MultiplicarPonto(centro);
            Vector3 v = new Vector3((float)centro.X, 0, (float)centro.Z);

            camera.Eye = v;
        }
Ejemplo n.º 11
0
        private void DesenharSrPalito()
        {
            Ponto4D pontoCentral = new Ponto4D(0, 0, 0);
            Ponto4D pontoFinal   = PontoFinalBaseadoNoAngulo(pontoCentral, AnguloSrPalito, RaioSrPalito);

            SrPalito = new SegReta("A", null, pontoCentral, pontoFinal);
            SrPalito.ObjetoCor.CorR   = 0; SrPalito.ObjetoCor.CorG = 0; SrPalito.ObjetoCor.CorB = 0;
            SrPalito.PrimitivaTamanho = 5;
            objetosLista.Add(SrPalito);
        }
Ejemplo n.º 12
0
        protected override void atualizarBbox()
        {
            this.bBox = new BBox();
            Ponto4D primeiroPonto = this.pontosLista[0];

            this.bBox.Atribuir(primeiroPonto);
            foreach (Ponto4D ponto in this.pontosLista)
            {
                this.bBox.Atualizar(ponto);
            }
        }
Ejemplo n.º 13
0
        private void AumentarAnguloSrPalito()
        {
            if (SrPalito == null)
            {
                return;
            }

            AnguloSrPalito++;
            Ponto4D pontoFinal = PontoFinalBaseadoNoAngulo(SrPalito.Ponto1, AnguloSrPalito, RaioSrPalito);

            SrPalito.Ponto2.X = pontoFinal.X;
            SrPalito.Ponto2.Y = pontoFinal.Y;
        }
Ejemplo n.º 14
0
        private void DiminuirSrPalito()
        {
            if (SrPalito == null)
            {
                return;
            }

            RaioSrPalito--;
            Ponto4D pontoFinal = PontoFinalBaseadoNoAngulo(SrPalito.Ponto1, AnguloSrPalito, RaioSrPalito);

            SrPalito.Ponto2.X = pontoFinal.X;
            SrPalito.Ponto2.Y = pontoFinal.Y;
        }
 public void PontosAdicionar(Ponto4D pto)
 {
     pontosLista.Add(pto);
     if (pontosLista.Count.Equals(1))
     {
         base.BBox.Atribuir(pto);
     }
     else
     {
         base.BBox.Atualizar(pto);
     }
     base.BBox.ProcessarCentro();
 }
Ejemplo n.º 16
0
        private void DesenharTrianguloECirculos()
        {
            Ponto4D ponto1 = new Ponto4D(0, 100, 0);
            Ponto4D ponto2 = new Ponto4D(-100, -100, 0);
            Ponto4D ponto3 = new Ponto4D(100, -100, 0);

            DesenharSegReta(ponto1, ponto2, Color.Cyan);
            DesenharSegReta(ponto2, ponto3, Color.Cyan);
            DesenharSegReta(ponto3, ponto1, Color.Cyan);

            DesenharCirculo(ponto1, 100, Color.Black, 5);
            DesenharCirculo(ponto2, 100, Color.Black, 5);
            DesenharCirculo(ponto3, 100, Color.Black, 5);
        }
Ejemplo n.º 17
0
        protected override void atualizarBbox()
        {
            this.bBox = new BBox();
            Vector4 v             = pontosEsfera[0]._position;
            Ponto4D primeiroPonto = new Ponto4D(v.X, v.Y, v.Z);

            this.bBox.Atribuir(primeiroPonto);
            foreach (TexturedVertex ponto in pontosEsfera)
            {
                v = ponto._position;
                Ponto4D p = new Ponto4D(v.X, v.Y, v.Z);
                this.bBox.Atualizar(p);
            }
        }
        private void DesenharSpline()
        {
            Ponto4D ultimoPontoSpline = null;

            foreach (Ponto4D pontoSpline in this.pontosSpline)
            {
                if (ultimoPontoSpline != null)
                {
                    segReta = new SegReta("Spline", new Ponto4D(ultimoPontoSpline.X, ultimoPontoSpline.Y), new Ponto4D(pontoSpline.X, pontoSpline.Y), Color.Yellow, 3);
                    segReta.Desenhar();
                }
                ultimoPontoSpline = pontoSpline;
            }
        }
        public void Restaurar()
        {
            Ponto4D deslocamento = new Ponto4D(_deslocamentoX, _deslocamentoY, 0);
            double  angulo       = 0;

            pontoQuadrado1.X = _deslocamentoX;
            pontoQuadrado1.Y = _deslocamentoY - 3;

            pontoQuadrado2.X = _deslocamentoX;
            pontoQuadrado2.Y = _deslocamentoY + 3;
            foreach (Ponto4D ponto in pontos)
            {
                var pontoNovo = matematica.GerarPtosCirculo(angulo, _raio, deslocamento);
                ponto.X = pontoNovo.X;
                ponto.Y = pontoNovo.Y;
                angulo += _angulo;
            }
        }
        private string TratarColisao(Ponto4D pontoQuadrado, Ponto4D pontoCirculoMaior, double raioCirculoMaior)
        {
            var boundBox = base.bBox;

            if (pontoQuadrado.X > boundBox.obterMenorX || pontoQuadrado.X < boundBox.obterMaiorX || pontoQuadrado.Y > boundBox.obterMenorY || pontoQuadrado.Y < boundBox.obterMaiorY)
            {
                double x1 = pontoCirculoMaior.X, x2 = pontoQuadrado.X, y1 = pontoCirculoMaior.Y, y2 = pontoQuadrado.Y;
                if (Math.Sqrt(Math.Pow(((x2 - x1)), 2) + Math.Pow(((y2 - y1)), 2)) > raioCirculoMaior)
                {
                    return("Fora Completo");
                }
                return("Fora");
            }
            else
            {
                return("Dentro");
            }
        }
        /// <summary>
        /// Cria um círculo na cena
        /// </summary>
        /// <param name="raio">Raio</param>
        /// <param name="cor">Cor dos pontos do círculo</param>
        /// <param name="deslocamentoX">Caso necessário deslocar no eixo X utilziar um inteiro</param>
        /// <param name="deslocamentoY">Caso necessário deslocar no eixo Y utilziar um inteiro</param>
        /// <param name="primitivaTamanho">Tamanho dos pontos</param>
        public Circulo(string rotulo, double raio, Color cor, int quantidadePontos = 72, int deslocamentoX = 0, int deslocamentoY = 0, int primitivaTamanho = 4, int angulo = 5)
            : base(rotulo, cor, primitivaTamanho, PrimitiveType.Points)
        {
            _raio             = raio;
            _deslocamentoX    = deslocamentoX;
            _deslocamentoY    = deslocamentoY;
            _quantidadePontos = quantidadePontos;
            _angulo           = angulo;
            pontoQuadrado1    = new Ponto4D(deslocamentoX, deslocamentoY - 3);
            pontoQuadrado2    = new Ponto4D(deslocamentoX, deslocamentoY + 3);
            segReta           = new SegReta("Q", pontoQuadrado1, pontoQuadrado2, Color.Blue, 3);

            pontoQuadrado1 = new Ponto4D(deslocamentoX, deslocamentoY - 3);
            pontoQuadrado2 = new Ponto4D(deslocamentoX, deslocamentoY + 3);
            segReta        = new SegReta("Q", pontoQuadrado1, pontoQuadrado2, Color.Blue, 3);

            GerarCirculo();
        }
        private void GerarCirculo()
        {
            double  angulo       = 0;
            Ponto4D deslocamento = new Ponto4D(_deslocamentoX, _deslocamentoY, 0);

            for (int i = 0; i < _quantidadePontos; i = i + 1)
            {
                var ponto = matematica.GerarPtosCirculo(angulo, _raio, deslocamento);

                if (_angulosDesejados != null && _angulosDesejados.Count != 0 && (_angulosDesejados.FirstOrDefault(valor => valor == angulo) != 0))
                {
                    var anguloD = _angulosDesejados.FirstOrDefault(valor => valor == angulo);
                    pontosDosAngulos.Add(ponto);
                }
                pontos.Add(ponto);
                angulo += _angulo;
            }
            base.PontosAdicionar(pontos);
            GL.End();
        }
Ejemplo n.º 23
0
        private void DesenharSpline()
        {
            Ponto4D ponto1 = new Ponto4D(-200, -200);
            Ponto4D ponto2 = new Ponto4D(-200, 200);
            Ponto4D ponto3 = new Ponto4D(200, 200);
            Ponto4D ponto4 = new Ponto4D(200, -200);

            pontoSpline1 = new Ponto("D", null, ponto1);
            pontoSpline2 = new Ponto("E", null, ponto2);
            pontoSpline3 = new Ponto("F", null, ponto3);
            pontoSpline4 = new Ponto("G", null, ponto4);
            objetosLista.Add(pontoSpline1);
            objetosLista.Add(pontoSpline2);
            objetosLista.Add(pontoSpline3);
            objetosLista.Add(pontoSpline4);

            SegReta segReta1 = new SegReta("A", null, ponto1, ponto2);

            segReta1.PrimitivaTamanho = 5;
            segReta1.DefinirCorPonto(0, Color.Black);
            segReta1.ObjetoCor.CorR = 224; segReta1.ObjetoCor.CorG = 255; segReta1.ObjetoCor.CorB = 255;
            objetosLista.Add(segReta1);

            SegReta segReta2 = new SegReta("B", null, ponto2, ponto3);

            segReta2.PrimitivaTamanho = 5;
            segReta2.ObjetoCor.CorR   = 224; segReta2.ObjetoCor.CorG = 255; segReta2.ObjetoCor.CorB = 255;
            objetosLista.Add(segReta2);

            SegReta segReta3 = new SegReta("C", null, ponto3, ponto4);

            segReta3.PrimitivaTamanho = 5;
            segReta3.ObjetoCor.CorR   = 224; segReta3.ObjetoCor.CorG = 255; segReta3.ObjetoCor.CorB = 255;
            objetosLista.Add(segReta3);

            spline = new Spline("D", null, ponto1, ponto2, ponto3, ponto4, 10);
            spline.PrimitivaTamanho = 5;
            spline.ObjetoCor.CorR   = 255; spline.ObjetoCor.CorG = 255; spline.ObjetoCor.CorB = 0;
            objetosLista.Add(spline);
        }
Ejemplo n.º 24
0
        protected override void OnRenderFrame(FrameEventArgs e)
        {
            base.OnRenderFrame(e);
            GL.Clear(ClearBufferMask.ColorBufferBit);
            GL.MatrixMode(MatrixMode.Modelview);
            GL.Color3(Color.Green);
            GL.LineWidth(10);
            GL.Begin(PrimitiveType.Lines);
            GL.Vertex2(-250, 0);
            GL.Vertex2(-250, -300);
            GL.Color3(Color.Brown);
            GL.Vertex2(0, -250);
            GL.Vertex2(-300, -250);
            GL.End();
            Ponto4D pto = new Ponto4D(0, 0, 0, 1);
            var     bb  = new BBox();

            bb.Atribuir(pto);
            bb.Desenhar();

            this.SwapBuffers();
        }
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            var segmentoRetaA    = new SegReta("A", new Ponto4D(0, 20, 0), new Ponto4D(200, 20, 0), Color.Red, 3);
            var segmentoRetaB    = new SegReta("B", new Ponto4D(20, 0, 0), new Ponto4D(20, 200, 0), Color.Green, 3);
            var angulosDesejados = new List <double>()
            {
                45, 135, 225, 315
            };

            circuloMaior = new Circulo("C", raioCirculoMaior, Color.Black, angulosDesejados, 360, 200, 200, 1, 1);
            circuloMenor = new Circulo("C", 70, Color.Black, 360, 200, 200, 1, 1);


            objetosLista.Add(circuloMenor.segReta);
            Ponto4D ponto1 = circuloMaior.pontosDosAngulos[0];
            Ponto4D ponto2 = circuloMaior.pontosDosAngulos[1];
            Ponto4D ponto3 = circuloMaior.pontosDosAngulos[2];
            Ponto4D ponto4 = circuloMaior.pontosDosAngulos[3];

            corQuadrado = Color.Pink;
            segmentoRetaQuadradoCima     = new SegReta("p", ponto1, ponto2, corQuadrado, 1);
            segmentoRetaQuadradoEsquerda = new SegReta("p", ponto2, ponto3, corQuadrado, 1);
            segmentoRetaQuadradoBaixo    = new SegReta("p", ponto3, ponto4, corQuadrado, 1);
            segmentoRetaQuadradoDireita  = new SegReta("p", ponto4, ponto1, corQuadrado, 1);

            circuloMenor.DefinirBoundBox(ponto1, ponto3);

            objetosLista.Add(segmentoRetaQuadradoCima);
            objetosLista.Add(segmentoRetaQuadradoDireita);
            objetosLista.Add(segmentoRetaQuadradoBaixo);
            objetosLista.Add(segmentoRetaQuadradoEsquerda);
            objetosLista.Add(segmentoRetaA);
            objetosLista.Add(segmentoRetaB);
            objetosLista.Add(circuloMenor);
            objetosLista.Add(circuloMaior);
            GL.ClearColor(Color.Gray);
        }
Ejemplo n.º 26
0
        public void DesenhaEsfera(double radius, int slices, int stacks, int textu)
        {
            GL.Enable(EnableCap.Texture2D);
            GL.BindTexture(TextureTarget.Texture2D, textu);
            GL.Color3(Color.White);
            GL.Begin(PrimitiveType.Quads);
            double stack = (2 * Math.PI) / stacks;
            double slice = (2 * Math.PI) / slices;

            for (double theta = 0; theta < 2 * Math.PI; theta += stack)
            {
                for (double phi = 0; phi < 2 * Math.PI; phi += slice)
                {
                    Ponto4D p1 = getPoints(phi, theta, radius);
                    Ponto4D p2 = getPoints(phi + slice, theta, radius);
                    Ponto4D p3 = getPoints(phi + slice, theta + stack, radius);
                    Ponto4D p4 = getPoints(phi, theta + stack, radius);

                    double s0 = theta / (2 * Math.PI);
                    double s1 = (theta + stack) / (2 * Math.PI);
                    double t0 = phi / (2 * Math.PI);
                    double t1 = (phi + slice) / (2 * Math.PI);

                    GL.TexCoord2(s0, t0);
                    GL.Vertex3(p1.X, p1.Y, p1.Z);

                    GL.TexCoord2(s1, t0);
                    GL.Vertex3(p2.X, p2.Y, p2.Z);

                    GL.TexCoord2(s1, t1);
                    GL.Vertex3(p3.X, p3.Y, p3.Z);

                    GL.TexCoord2(s0, t1);
                    GL.Vertex3(p4.X, p4.Y, p4.Z);
                }
            }
            GL.End();
            GL.Disable(EnableCap.Texture2D);
        }
        public string Mover(Ponto4D distancia, Ponto4D pontoCirculoMaior, double raioCirculoMaior)
        {
            double angulo = 0;

            var localizacao = TratarColisao(distancia, pontoCirculoMaior, raioCirculoMaior);

            if (localizacao != "Fora Completo")
            {
                pontoQuadrado1.X = distancia.X;
                pontoQuadrado1.Y = distancia.Y - 3;

                pontoQuadrado2.X = distancia.X;
                pontoQuadrado2.Y = distancia.Y + 3;
                foreach (Ponto4D ponto in pontos)
                {
                    var pontoNovo = matematica.GerarPtosCirculo(angulo, _raio, distancia);
                    ponto.X = pontoNovo.X;
                    ponto.Y = pontoNovo.Y;
                    angulo += _angulo;
                }
            }
            return(localizacao);
        }
 public void DefinirBoundBox(Ponto4D pontoMin, Ponto4D pontoMax)
 {
     base.bBox.Atribuir(pontoMin, pontoMax);
 }
Ejemplo n.º 29
0
        protected override void OnKeyDown(OpenTK.Input.KeyboardKeyEventArgs e)
        {
            if (PontoSelecionado == null)
            {
                PontoSelecionado = A;
            }

            if (e.Key == Key.Escape)
            {
                Exit();
            }

            //Reinicia
            if (e.Key == Key.R)
            {
                SetaValoresIniciais();
            }

            //Aumenta a quantidade de ponto da Spline
            if (e.Key == Key.Plus || e.Key == Key.KeypadPlus)
            {
                qtdPontos++;
            }

            //Diminui a quantidade de ponto da Spline
            if (e.Key == Key.Minus || e.Key == Key.KeypadMinus)
            {
                if (qtdPontos > 0)
                {
                    qtdPontos--;
                }
            }

            //Muda pontos
            if (e.Key == Key.Number1 || e.Key == Key.Keypad1)
            {
                PontoSelecionado = A;
                ponto            = pontos.A;
            }

            if (e.Key == Key.Number2 || e.Key == Key.Keypad2)
            {
                PontoSelecionado = B;
                ponto            = pontos.B;
            }

            if (e.Key == Key.Number3 || e.Key == Key.Keypad3)
            {
                PontoSelecionado = C;
                ponto            = pontos.C;
            }

            if (e.Key == Key.Number4 || e.Key == Key.Keypad4)
            {
                PontoSelecionado = D;
                ponto            = pontos.D;
            }

            //Cima
            if (e.Key == Key.C)
            {
                PontoSelecionado.Y++;
            }

            //Baixo
            if (e.Key == Key.B)
            {
                PontoSelecionado.Y--;
            }

            //Direita
            if (e.Key == Key.D)
            {
                PontoSelecionado.X++;
            }

            //Esquerda
            if (e.Key == Key.E)
            {
                PontoSelecionado.X--;
            }
        }
 public Ponto4D(Ponto4D pto)
 {
     this.x = pto.x;
     this.y = pto.y;
     this.z = pto.z;
 }