/** * 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(); } }
/** * 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(); } }