コード例 #1
0
        /**
         * Translada a figura de acordo com a variação dos pontos x e y
         */
        private void Transladar()
        {
            var deltaX = this.x2 - this.x1;
            var deltaY = this.y2 - this.y1;

            foreach (var retaAux in this.listaRetas)
            {
                retaAux.SetX1(retaAux.GetX1() + deltaX);
                retaAux.SetY1(retaAux.GetY1() + deltaY);

                retaAux.SetX2(retaAux.GetX2() + deltaX);
                retaAux.SetY2(retaAux.GetY2() + deltaY);

                // chama um dos algoritmos de recorte antes de desenhar, para garantir o desenho dentro da janela de vizualizacao
                if (this.recorteEscolhido == Enum.RECORTE.LIANG)
                {
                    this.LiangBarsky(retaAux.GetX1(), retaAux.GetY1(), retaAux.GetX2(), retaAux.GetY2());
                }
                else
                {
                    this.RecortCohen(retaAux.GetX1(), retaAux.GetY1(), retaAux.GetX2(), retaAux.GetY2());
                }
            }

            foreach (var circAux in this.listaCircunferencias)
            {
                circAux.SetXc(circAux.GetXc() + deltaX);
                circAux.SetYc(circAux.GetYc() + deltaY);

                circAux.SetX(circAux.GetX() + deltaX);
                circAux.SetY(circAux.GetY() + deltaY);

                this.circunferencia = new Circunferencia(circAux.GetX(), circAux.GetY(), circAux.GetXc(), circAux.GetYc());

                this.AlgoritmoCircunferenciaBresenham();
            }
        }
コード例 #2
0
        /**
         * Rotaciona a figura de acordo com um valor definido pelos 2 pontos selecionados pelo usuario
         * Pega-se a diferença dos valores de x e obtêm o ângulo de rotação
         */
        private void Rotacionar()
        {
            double degrees  = (this.x2 - this.x1) / 5;
            double angle    = Math.PI * degrees / 180.0;
            double sinAngle = Math.Sin(angle);
            double cosAngle = Math.Cos(angle);

            /**
             * translada a figura para uma nova origem no centro da tela
             */
            this.x1 = imagem.Image.Width / 2;
            this.x2 = 0;
            this.y1 = imagem.Image.Height / 2;
            this.y2 = 0;

            this.Transladar();

            foreach (var retaAux in this.listaRetas)
            {
                retaAux.SetX1(Math.Round(retaAux.GetX1() * cosAngle - retaAux.GetY1() * sinAngle));
                retaAux.SetY1(Math.Round(retaAux.GetY1() * cosAngle + retaAux.GetX1() * sinAngle));

                retaAux.SetX2(Math.Round(retaAux.GetX2() * cosAngle - retaAux.GetY2() * sinAngle));
                retaAux.SetY2(Math.Round(retaAux.GetY2() * cosAngle + retaAux.GetX2() * sinAngle));

                /**
                 * Translada a figura para as posicoes iniciais, antes de desenhar
                 */
                this.x1 = 0;
                this.x2 = imagem.Image.Width / 2;
                this.y1 = 0;
                this.y2 = imagem.Image.Height / 2;
                this.Transladar();


                // chama um dos algoritmos de algoritmos de recorte para garantir o desenho dentro da janela de visualização
                if (this.recorteEscolhido == Enum.RECORTE.LIANG)
                {
                    this.LiangBarsky(retaAux.GetX1(), retaAux.GetY1(), retaAux.GetX2(), retaAux.GetY2());
                }
                else
                {
                    this.RecortCohen(retaAux.GetX1(), retaAux.GetY1(), retaAux.GetX2(), retaAux.GetY2());
                }
            }

            foreach (var circAux in this.listaCircunferencias)
            {
                circAux.SetXc(Math.Round(circAux.GetXc() * cosAngle - circAux.GetYc() * sinAngle));
                circAux.SetYc(Math.Round(circAux.GetYc() * cosAngle + circAux.GetXc() * sinAngle));

                this.circunferencia = new Circunferencia(circAux.GetX(), circAux.GetY(), circAux.GetXc(), circAux.GetYc());

                this.x1 = 0;
                this.x2 = imagem.Image.Width / 2;
                this.y1 = 0;
                this.y2 = imagem.Image.Height / 2;
                this.Transladar();

                this.AlgoritmoCircunferenciaBresenham();
            }
        }