martes, 24 de septiembre de 2013

[Java] Dibujar un triangulo usando la longitud de sus lados

 

Es algo un poco complicado de calcular la verdad pero le dejo una buena idea

triangulo



import java.util.Scanner;
import java.awt.*;
import java.util.HashSet;

import javax.swing.JFrame;
import javax.swing.JOptionPane;


public class Triangulo {

public static void main(String[] args) {



Scanner reader = new Scanner(System.in);


System.out.print("Dame el primer lado de triangulo (mas pequeño)");
int a = reader.nextInt();
System.out.println ("Segundo lado del triangulo");
int b = reader.nextInt();
System.out.println ("Tercer lado del triangulo ");
int c = reader.nextInt();

// System.out.print(area);
//AQUI DIBUJA EL TRIANGULO

DibujaTriangulito dibuja = new DibujaTriangulito("Dibujo Triangulito",a,b,c);

dibuja.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dibuja.setVisible(true);
dibuja.setSize(500, 400);
}

}

class DibujaTriangulito extends JFrame {

private int a;
private int b;
private int c;

public DibujaTriangulito(String title, int a, int b, int c)
{
super(title);
this.a=a;
this.b=b;
this.c=c;
}

public void paint(Graphics g){
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
int inicialX=20;
int inicialY=380;
g.drawLine(inicialX, inicialY, inicialX+(a*30), inicialY);

int radio = b*15;
HashSet c1 = new HashSet();
HashSet c2 = new HashSet();
for (double grados = 0; grados<(2*Math.PI); grados=(grados+(Math.PI/(b*30)))) {
double x = (Math.cos(grados)*radio)+inicialX;
double y = (Math.sin(grados)*radio)+inicialY;
int xInt= (int)x;
int yInt =(int)y;
c1.add(new Puntito(xInt, yInt));
//Ellipse2D ellipse = new Ellipse2D.Double(x-1, y-1, 1, 1);
//g2d.draw(ellipse);
}
System.out.println("-----------------");
radio=c*15;
for (double grados = 0; grados<(2*Math.PI); grados=(grados+(Math.PI/(c*30)))) {
double x = (Math.cos(grados)*radio)+inicialX+(a*30);
double y = (Math.sin(grados)*radio)+inicialY;
int xInt= (int)x;
int yInt =(int)y;
//Ellipse2D ellipse = new Ellipse2D.Double(x-1, y-1, 1, 1);
//g2d.draw(ellipse);
c2.add(new Puntito(xInt, yInt));
}

int lapsoX=0;
int lapsoY=0;
for(Puntito punto:c1){
for (Puntito puntito : c2) {
if(punto.equals(puntito)){
System.out.println("x: " + punto.getX());
lapsoX=punto.getX();
System.out.println("Y: " + punto.getY());
lapsoY=punto.getY();
}
}
}

if(lapsoX==0)
JOptionPane.showMessageDialog(null, "No hay manera de hacer circulo");
else
{
g.drawLine(inicialX, inicialY, lapsoX, lapsoY);
g.drawLine(lapsoX, lapsoY, inicialX+(a*30), inicialY);
}
}
}

class Puntito {
private int x;
private int y;

public Puntito(int x, int y) {
this.x = x;
this.y = y;
}

public int getX() {
return x;
}

public int getY() {
return y;
}

@Override
public boolean equals(Object obj) {
Puntito punt = (Puntito)obj;
int variX = Math.abs(x-punt.getX());
int variY = Math.abs(y-punt.getY());
if((variX<2&& variY<1) && punt.getY()<380 )
return true;
else
return false;

}

}



No hay comentarios:

Publicar un comentario