Muy buenos dias, tardes, noches (segun sea el caso) a todos los lectores que pasaron por mi post, hoy voy a realizar un programa que sea capas de sacar el area y el perimetro de ciertas figuras basicas, ademas de algun extra, con el fin de que sea de utilidad a alguno de ustedes, sobre todo para aquellos que estan empezando a programar en java.
Empezemos, lo primero sera empezar a crear los objetos, en este caso son figuras geometricas planas; triangulo, cuadrado, rectangulo, pentagono, hexagono.
Primero creamos el nuevo projecto, yo le llamare FigurasGeometricas, despues creamos un paquete, yo lo llamare objetos, y dentro del mismo la nueva clase llamada Triangulo.
Ahora escribimos los atributos de interes que tiene el triangulo, como por ejemplo:
sus lados, despues el constructor por defecto y con paso de parametros.
Despues seguimos con los metodos que se encargan de sacar el area y perimetro, pero antes una clase llamada Figura y una interfaz que contenga los metodos llamada MetodosBasicos, despues a Figura le implementamos a Metodos basicos.
Y a su vez Triangulo que herede de Figura.
De esta manera no sera necesario escribir el codigo directamente, ademas de que aplicamos la herencia.
Despues Escribimos el codigo correspondiente a cada metodo.
Area.
Lo que esta susediendo aqui es la aplicacion de la formula del area para cualquier triangulo,
A = √ (s(s-a)(s-b)(s-c))
donde s = 1/2(a+b+c)
y asi nos quitamos de problemas con los distintos tipos de triangulo.
Solo un detalle, no se podra sacar el area de un triangulo donde:
lado1 = 5;
lado2 = 10;
lado3 = 16;
Ya que genera una raiz negativa.
Otra cosa. Por lo regular se saca el area de un triangulo con la base y la altura, no estaria mal que tambien pueda hacer eso.
Ahora solo falta el perimetro.
Solo es la suma de todos los lados.
Hasta este punto ya terminamos con triangulo, vamos con cuadrado creando la clase Cuadrilatero.
¿Porque cuadrilatero?
En este caso se puede utilizar las formulas para poder sacar area de cualquier cuadrilatero a excepcion del trapecio, pero no de la misma forma el perimetro, para no entrar mucho en detalle solo se considera al cuadrado, rectangulo y rombo.
Cuadrado y rectangulo van a ocupar la clase Cuadrilatero ya que en estos todos los angulos internos son de 90 grados y tambien se saca de la misma manera el perimetro, pero el rombo no tiene todos sus angulos internos iguales, entonces no puede sacar el perimetro de la misma forma.
La clase Cuadrilatero va a tener solo a y b y hereda de Figura.
Despues creamos la clase Rombo y que herede de Cuadrilatero.
Como se aprecia en la imagen, super se encarga de enviar los parametros a la clase padre y asi se ejecutan los metodos de la clase padre, pero si se ignora super se ejecuta el metodo como esta en la clase hija o tambien se complementa si se usa super segido de mas codigo, de esta manera podemos calcular el perimetro de diferente forma y el area de una forma no tan diferente.
Perimetro de rombo completo.
Lo que sucede aqui con apoyo a la siguiente imagen.
Como se puede apreciar, para calcular el perimetro de un rombo en base a su diagonal mayor y menos se usa el teorema de pitagoras, que es lo que realiza este metodo, despues de optener a c ya que la misma reprecenta solo un lado se multiplica por 4 para asi retornar el perimetro.
Y por ultimo solo falta el pentagono y el hexagono, lo mismo sucede como paso con rectangulo y cuadrado, estos podrian ocupar la misma clase ya que tambien ocupan las mismas formulas, y lo unico que los hace diferentes es el numero de lados.
Comunmente se tienen el apotema y el lado, que van a ser los atributos de nuestra clase Poligono.
Entonces la clase poligono queda asi.
Donde nLados marca la diferencia entre un pentagono hexagono etc, solo es recomendado para figuras con mas de 4 lados ya que pueden variar los resultados.
Por cierto, casi se me olvida el circulo, rapidamente una clase Circulo que solo tenga atributo radio.
de esta manera solo queda hacer un Frame o una clase principal que permita utilizar estos objetos, pero eso ya depende de ustedes,
En mi caso hice una clase principal.
Pero por si lo necesitan, mandenme un mp.
Estas clases no necesariamente deben de ir asi, podrian ir de otra forma pero la forma correcta es aquella que se acomode a nuestras necesidades, esto seria todo de mi parte, espero les sea de utilidad, si tienen dudas pueden comentarlas y en lo que pueda les ayudare.