[RESOLVIDO] Desenhar figuras geométricas

Já desenhei um retangulo e quadrado no terminal, porém não consigo desenha o: Triângulo Esquerdo: precisa da base e da altura; Círculo: precisa do raio. Por favor me ajudem.

  public static void triangulo(int base, int altura)
  {
    char[][] tela = new char[altura][base];
    
    preencher(tela, ' ');
    linha(tela, 0, altura - 1, base - 1, altura - 1); // desenha a base
    linha(tela, 0, 0, 0, altura - 1); // desenha a altura (esquerdo)
    linha(tela, 0, 0, base - 1, altura - 1); // diagonal
    
    imprimir(tela);
  }

no método linha, use a equação da reta:

public static void linha(char[][] tela, int xi, int yi, int xf, int yf) {
  double m; // calcula m
  if (Math.abs(m) < 1) {
    // loop corre em x
    for (int x = xi; x <= xf; x++) {
      int y; // calcula y
      tela[y][x] = '*';
    }
  } else {
    // loop corre em y
    ...
  }
}

para o circulo, a mesma coisa:

  public static void circulo(int r)
  {
    char[][] tela = new char[r * 2 + 1][r * 2 + 1];
    
    preencher(tela, ' ');
    
    for (int x = 0; x < r; x++) {
      int y;// calcula y
      // atualiza tela nas quatro direções:
      tela[y + r][x + r] = '*';
      tela[-y + r][x + r] = '*';
      tela[y + r][-x + r] = '*';
      tela[-y + r][-x + r] = '*';
    }
    for (int y = 0; y < r; y++) {
      ...
    }
    imprimir(tela);
  }
import java.lang.Math;

public class Desenho
{
  public static void main(String[] args)
  {
    //triangulo(15, 20);
    circulo(7);
  }
  
  public static void circulo(int r)
  {
    char[][] tela = new char[r * 2 + 1][r * 2 + 1];
    
    preencher(tela, ' ');
    
    for (int x = 0; x < r; x++) {
      int y = (int) Math.sqrt(r * r - x * x);
      tela[y + r][x + r] = '*';
      tela[-y + r][x + r] = '*';
      tela[y + r][-x + r] = '*';
      tela[-y + r][-x + r] = '*';
    }
    for (int y = 0; y < r; y++) {
      int x = (int) Math.sqrt(r * r - y * y);
      tela[y + r][x + r] = '*';
      tela[-y + r][x + r] = '*';
      tela[y + r][-x + r] = '*';
      tela[-y + r][-x + r] = '*';
    }
    imprimir(tela);
  }
  public static void triangulo(int base, int altura)
  {
    char[][] tela = new char[altura][base];
    
    preencher(tela, ' ');
    linha(tela, 0, altura - 1, base - 1, altura - 1); // desenha a base
    linha(tela, 0, 0, 0, altura - 1); // desenha a altura (esquerdo)
    linha(tela, 0, 0, base - 1, altura - 1); // diagonal
    
    imprimir(tela);
  }
  public static void linha(char[][] tela, int xi, int yi, int xf, int yf) {
    double m = (yf - yi) / (1.0 * (xf - xi));
    if (Math.abs(m) < 1) {
      for (int x = xi; x <= xf; x++) {
        int y = (int)((x - xi) * m + yi);
        tela[y][x] = '*';
      }
    } else {
      for (int y = yi; y <= yf; y++) {
        int x = (int)((y - yi + xi) / m);
        tela[y][x] = '*';
      }
    }
  }
  public static void imprimir(char[][] tela) {
    for (int y = 0; y < tela.length; y++) {
      for (int x = 0; x < tela[y].length; x++) {
      	System.out.print(tela[y][x]);
      }
      System.out.println();
    }
  }
  public static void preencher(char[][] tela, char c) {
    for (int y = 0; y < tela.length; y++) {
      for (int x = 0; x < tela[y].length; x++) {
      	tela[y][x] = c;
      }
    }
  }
}
1 curtida