N1: PROBLEMAS, SOLUCIONES y programas

Nychol Bazurto Gómez

Problemas y soluciones

Nivel

1

Comprensión y especificación del problema

Elementos de un programa

Diseño de la solución

Construcción de la solución

Qué vamos a aprender

  • Proceso global de solución de un programa usando un programa de computador.
  • Construir un modelo con los elementos que intervienen en el programa.
  • Especificar los servicios de un programa.
  • Completar una solución parcial a un problema usando:
    • Expresiones simples
    • Asignaciones
    • Invocaciones de método

Elementos de un programa: Algoritmos

Algoritmos e Instrucciones

Solución de un problema muy preciso y pequeño

Secuencia de instrucciones

Programa 

conjunto de algoritmos, cada uno responsable de una parte de la solución del problema global.

Secuencia ordenada de pasos para realizar una actividad

Algoritmo para llegar a la universidad.

Algoritmo para enviar un mensaje por Whatsapp.

Algoritmo para preparar un desayuno.

Algoritmo para ir a una fiesta.

Elementos de un programa: Algoritmos

ALGOrItMO

se traduce

LENGUAJE DE PROGRAMACIon

tienen un conjunto de reglas para expresar

SINTAXIS

Elementos de un programa: Algoritmos

Elementos de un programa: Clases

CLASES

Un programa en JAVA está formado por un conjunto de clases.


Cada clase se guarda en un archivo distinto cuyo nombre debe ser igual al nombre de la clase.

Empleado.java

Empresa.java

Elementos de un programa: Clases en Java

DECLARACION de clases en java

Empleado
nombre
apellido
sexo
salario
Fecha
dia
mes
anio
public class Empleado
{
 //Atributos
 private String nombre;
 private String apellido;
 private int salario;
 private int sexo;
}
public class Fecha
{
 //Atributos
 private int dia;
 private int mes;
 private int anio;
}

Archivo

Empleado.java

Archivo

Fecha.java

Elementos de un programa: Clases en Java

TIPOS DE DATOS EN JAVA

public class Empleado
{
 //Atributos
 private String nombre;
 private String apellido;
 private int salario;
 private int sexo;
}
public class Fecha
{
 //Atributos
 private int dia;
 private int mes;
 private int anio;
}

Archivo: Empleado.java

Archivo: Fecha.java

Enteros

REALES

CADENAS DE CARACTERES

int

double

String

Elementos de un programa: Clases en Java

ASOCIACIONES EN JAVA

public class Empleado
{
 //Atributos
 private String nombre;
 private String apellido;
 private int salario;
 private int sexo;

 private Fecha fechaNacimiento;
 private Fecha fechaIngreso;
}

Archivo: Empleado.java

Empleado
nombre
apellido
sexo
salario
Fecha
dia
mes
anio

fechaNacimiento

fechaIngreso

Las ​relaciones entre clases, se declaran como atributos.

El tipo de atributo es el nombre de la clase.

CASO DE ESTUDIO

las lineas telefonicas

  • Se quiere crear una aplicación para controlar los gastos telefónicos de una empresa. La empresa cuenta con tres líneas telefónicas a través de las cuales se pueden realizar llamadas locales, de larga distancia y a celulares.
  • La aplicación debe permitir:

1. Registrar una llamada en alguna de las líneas

2.Mostrar la información detallada de cada línea

–Número de llamadas realizadas

–Duración total de las llamadas en minutos

–Costo total de las llamadas en pesos

3.Mostrar un consolidado total de la información de todas las líneas (costo total en pesos de las tres líneas, número total de llamadas realizadas, duración total de llamadas en minutos y el cálculo del costo promedio por minuto según el costo total y el total de minutos).

4.Reiniciar el uso las líneas telefónicas, dejando todos sus valores en cero.

Caso de estudio: Línes telefónicas

Caso de estudio: Línes telefónicas

CASO DE ESTUDIO

las lineas telefonicas

requerimientos funcionales

R1:Registrar (agregar) una llamada en alguna de las líneas.

R2: Mostrar la información detallada de cada línea.​

R3: ...

R4: ...

Caso de estudio: Línes telefónicas

Caso de estudio: Línes telefónicas

Empresa



 
LineaTelefonica
int numeroLlamadas
int numeroMinutos
double costoLlamadas



 

linea1

linea2

linea3

No tiene atributos particulares

Hay 3 líneas telefónicas

(asociaciones)

Caso de estudio: Línes telefónicas

LineaTelefonica
int numeroLlamadas
int numeroMinutos
double costoLlamadas



 

Archivo: LineaTelefonica.java

public class LineaTelefonica
{
private int numeroLlamadas;
private int numeroMinutos;
private double costoLlamadas;
}

Caso de estudio: Línes telefónicas

Archivo: Empresa.java

public class Empresa
{
private LineaTelefonica linea1;
private LineaTelefonica linea2;
private LineaTelefonica linea3;
}

Son las 3 asociaciones

Elementos de un programa: Métodos

LineaTelefonica
int numeroLlamadas
int numeroMinutos
double costoLlamadas



 

METODOS

Son los algoritmos de la clase

Lo que la clase sabe hacer:

  • Resolver un problema puntual.
  • Servicio que la clase debe prestar a las demás clases del modelo

Piense que …

–Una clase es la responsable de manejar la información contenida en sus atributos

–Los métodos son el medio para hacerlo

Elementos de un programa: Métodos

QUé debe saber hacer una línea telefónica

–El número total de sus llamadas

–El costo total de sus llamadas

–La cantidad de minutos consumidos

informar

agregar

–Una llamada local

–Una llamada de larga distancia

–Una llamada de celular

darNumeroLlamadas

darCostoLlamadas

darNumeroMinutos

agregarLlamadaLocal

agregarLlamadaLargaDistancia

agregarLlamadaCelular

Elementos de un programa: Métodos

Un método está compuesto por 

public void agregarLlamadaLocal( int minutos )

nombre

  • El nombre es el mismo del diseño.

Para definir métodos se utiliza el siguiente código Java.

<visibilidad> <tipo> <nombre> (parámetros)

Elementos de un programa: Métodos

¿qué información, que no tenga ya el objeto, es indispensable para poder resolver el problema puntual?

Un método está compuesto por 

public void agregarLlamadaLocal( int minutos )

Lista de parámetros

 Conjunto de valores necesarios para resolver el problema​

Son equivalentes a las entradas definidas en los requerimientos funcionales, deben tener un tipo y un nombre.

Elementos de un programa: Métodos

Tipo de dato al que pertenece el resultado que va a retornar el método. Si no hay respuesta, se indica el tipo void.

Un método está compuesto por 

public void agregarLlamadaLocal( int minutos )

Tipo de respuesta

Elementos de un programa: Métodos

  • Lista de instrucciones que representa el algoritmo que resuelve el problema puntual.
  • En el cuerpo se explica la forma de utilizar los valores de los atributos para calcular alguna información o la forma de modificarlos

Un método está compuesto por 

public void agregarLlamadaLocal( int minutos )
{
    numeroLlamadas = numeroLlamadas + 1;
    numeroMinutos = numeroMinutos + minutos;
    costoLlamadas = costoLlamadas + ( minutos * 35 );
}

Cuerpo del método

Elementos de un programa: Tipos de instrucciones

TIPOS DE INSTRUCCIONES

instrucción de asignación

  • Para definir el nuevo valor de un atributo.
  • Se construye con un “=
public void agregarLlamadaLocal( int minutos )
{
    numeroLlamadas = numeroLlamadas + 1;
    numeroMinutos = numeroMinutos + minutos;
    costoLlamadas = costoLlamadas + ( minutos * 35 );
}

Elementos de un programa: Tipos de instrucciones

instrucción de asignación

numeroLlamadas = numeroLlamadas + 1;

Atributo que va a ser modificado

Expresión que indica el
nuevo valor que debe
guardarse en el atributo

Pueden hacer parte de una expresión: los atributos, los parámetros y los valores constantes.

Con operadores
aritméticos (+, -, *, /)

Elementos de un programa: Tipos de instrucciones

TIPOS DE INSTRUCCIONES

instrucción de RETORNO

  • Para devolver un resultado como solución del problema puntual.
  • Se representa con un “return
public int darNumeroLlamadas( )
{
return numeroLlamadas;
}

Elementos de un programa: Tipos de instrucciones

TIPOS DE INSTRUCCIONES

instrucción de LLAMADA (O INVOCACIón) de un método

Usar métodos de la misma clase.

Usar métodos de un objeto de otra clase con el cual existe una asociación.

Elementos de un programa: Tipos de instrucciones

INVOCACIón de un método de la misma clase

Se hace para construir métodos complejos a partir de métodos mas simples que ya están escritos.

Elementos de un programa: Tipos de instrucciones

INVOCACIón de un método de la misma clase

Ejemplo: calcular el monto de los impuestos que debe pagar el empleado en un año. Los impuestos se calculan como el 19.5% del total de salarios recibidos en un año.

Vamos a descomponer el problema en dos métodos:
– Cálculo del valor total del salario anual.
– Cálculo del monto del impuesto, que usa el método anterior.

Empleado
String nombre
String apellido
int sexo
int salario
int calcularSalarioAnual( )
double calcularImpuesto( )

Elementos de un programa: Tipos de instrucciones

INVOCACIón de un método de la misma clase

Empleado
String nombre
String apellido
int sexo
int salario
int calcularSalarioAnual( )
double calcularImpuesto( )
public class Empleado
{
...
  public int calcularSalarioAnual( )
  {
   return (salario * 12 );
  }
  public double calcularImpuesto( )
  {
   return ( calcularSalarioAnual( ) * 19.5 / 100 );
  }
}

Llamado al método calcularSalarioAnual

Elementos de un programa: Tipos de instrucciones

Se pueden usar variables para cálculos intermedios

Empleado
String nombre
String apellido
int sexo
int salario
int calcularSalarioAnual( )
double calcularImpuesto( )
public class Empleado
{
...
  public int calcularSalarioAnual( )
  {
   int salarioAnual = salario * 12;
   return salarioAnual;
  }
  public double calcularImpuesto( )
  {
   double impuesto = calcularSalarioAnual( ) * 19.5 / 100;
   return impuesto;
  }
}

Variables

Elementos de un programa: Tipos de instrucciones

INVOCACIÓN DE UN MÉTODO DE una clase con la cual existe una asociación

Se hace cuando se necesita obtener o modificar alguna información de un objeto de otra clase con el cual existe una asociación.

Empresa

int darNumeroLlamadas()
 
LineaTelefonica
int numeroLlamadas
int numeroMinutos
double costoLlamadas

int darNumeroLlamadas()

 

linea1

linea2

linea3

En la clase LineaTelefonica existe el
método darNumeroLlamadas

El método darTotalNumeroLlamadas de la clase Empresa DEBE invocar el método darNumeroLlamadas de la clase LineaTelefonica

Elementos de un programa: Tipos de instrucciones

INVOCACIÓN DE UN MÉTODO DE una clase con la cual existe una asociación

public class EmpresaTelefonica  
{
	…
        public int darTotalNumeroLlamadas( )
	{
	return (linea1.darNumeroLlamadas( )  +
	        linea2.darNumeroLlamadas( ) +
		linea3.darNumeroLlamadas( ) );	
	}
	
}
Empresa

int darNumeroLlamadas()
 

Nombre de la asociación

Punto

Nombre del método de la asociación. No tiene parámetros en este caso ( )

Elementos de un programa: Tipos de instrucciones

INVOCACIÓN DE UN MÉTODO CON PARámetros

public class LineaTelefonica
{
    …
    public void agregarLlamadaLocal( int minutos )
    {
        numeroLlamadas = numeroLlamadas + 1;
        numeroMinutos = numeroMinutos + minutos;
        costoLlamadas = costoLlamadas + ( minutos * 35 );
    }
}
public class Empresa
{
    …
    public void agregarLlamadaLocalLinea1( int minutos )
    {
        linea1.agregarLlamadaLocal( minutos );
    }
}

Nombre de la asociación

Nombre del método de la asociación. 

Parámetros

Elementos de un programa: Tipos de instrucciones

INVOCANDO MÉTODOs CON PARámetros

Basta con utilizar el nombre del parámetro en el cuerpo del método de la misma manera que se utilizan los atributos

¿Cuándo necesita parámetros un método?

¿Cómo se declara un parámetro?

¿Cómo se utiliza el valor de un parámetro?

Cuando la información que tiene el objeto en sus atributos no es suficiente para resolver el problema

En la signatura del método se define el tipo del dato del parámetro y se le asocia un nombre

Elementos de un programa: Tipos de instrucciones

INVOCANDO MÉTODOs CON PARámetros

En el momento de hacer la llamada, se deben pasar tantos valores como parámetros está esperando el método. Esos valores pueden ser:

  • Constantes (por ejemplo, 500).
  • Atributos del objeto que hace la llamada (por ejemplo, costoLlamadas).
  • Parámetros del método desde el cual se hace la llamada (por ejemplo, minutos)
  • Expresiones que mezclen los tres anteriores (por ejemplo, costoLlamadas * minutos * 500)

¿Se puede utilizar el parámetro por fuera del cuerpo del método?

Aquel que hace la llamada del método, ¿cómo hace para definir los valores de los parámetros ?

 

NO, en ningún caso

Elementos de un programa: Tipos de instrucciones

CREACIón de los objetos

  • Se hace con la instrucción new.
  • Los objetos de las asociaciones los crea la clase dueña (que posee) las asociaciones en alguno de sus métodos.
/**
* Inicializa las líneas telefónicas de la empresa <br>
* <b>post: </b> Se inicializaron las 3 líneas telefónicas.
*/
public void inicializar( )
{
  //
  //Inicializa la línea 1
  linea1 = new LineaTelefonica( );
  linea1.inicializar( );
  //
  //Inicializa la línea 2
  linea2 = new LineaTelefonica( );
  linea2.inicializar( );
  //
  //Inicializa la línea 3
  linea3 = new LineaTelefonica( );
  linea3.inicializar( );
}

Elementos de un programa: Tipos de instrucciones

CREACIón de los objetos

    /**
     * Inicializa la línea telefónica. <br>
     * <b>post: </b> La línea se inicializó con valores en cero.
     */
    public  LineaTelefonica ( )
    {
	     numeroLlamadas= 0;
             numeroMinutos = 0;
             costoLlamadas= 0;
    }

Cliente

Tengo un problema ...

PROBLEMA

PROGRAMADOR

PROCESO

SOLUCión

PROGRAMA

Etapa 1

Etapa 2

Etapa N

USUARIO

Conjunto de etapas para entender el problema del cliente y construir una solución de buena calidad

  1. Análisis del problema.
  2. Especificación del problema.
  3. Diseño de la solución.
  4. Construcción de la solución.

Diseño de la solución

Diseño de la solución: Clases

CASO DE ESTUDIO: El triángulo

Se quiere construir un programa que permita dibujar un triángulo.
Esta figura geométrica está definida por tres puntos, cada uno de los cuales tiene dos coordenadas X, Y. Este triángulo tiene, además, un color para las líneas y un color para el relleno.
Un color, por su parte, está definido por tres valores numéricos entre 0 y 255 (estándar RGB por Red-Green-Blue). El primer valor numérico define la intensidad en rojo, el segundo en verde y el tercero el azul.

El programa debe permitir:

1. Dibujar el triángulo en la interfaz.
2. Cambiar los puntos del triángulo.
3. Cambiar el color de relleno del triángulo.
4. Cambiar el color de las líneas (bordes) del triángulo.

5. Mostrar el perímetro del triángulo.

6. Mostrar el área del triángulo.
7. Mostrar la altura del triángulo.

Diseño de la solución: Clases

1. Definir clases

CASO DE ESTUDIO: EL Triángulo

Casi siempre una por entidad definida en el análisis

Un nombre para cada clase

Triangulo
Punto
Color

Diseño de la solución:

Relaciones dentro de las clases

2. Definir relaciones dentro de las clases.

Multiplicidad y cardinalidad

"Flechas" de dependencia entre las clases.

CASO DE ESTUDIO: EL Triángulo

Triangulo


 



 
Punto
Color

-punto1

-punto2

-punto3

-colorLineas

-colorRelleno

Diseño de la solución: Atributos dentro de las clases

3. Definir atributos dentro de las clases

Caracteres, números enteros, números reales, otros.

Nombre y tipo de dato

Triangulo


 



 
Punto
-x: double
-y: double
Color
-verde: int
-rojo: int
-azul: int

-punto1

-punto2

-punto3

-colorLineas

-colorRelleno

CASO DE ESTUDIO: EL Triángulo

Diseño de la solución: Métodos dentro de las clases

4. Definir métodos dentro de las clases.

Pueden ser analizadores o modificadores.

Nombre y tipo de operación

ANALIZADORES

MOdIFICADORES

DEBEN entregar (retornar) un valor, que puede ser calculado o un simple atributo (pueden o no alterar el valor de algún atributo).

alteran los valores de algunos atributos y no entregan ningún valor.

CASO DE ESTUDIO: EL Triángulo

Diseño de la solución: Métodos dentro de las clases

Métodos JAVA
Analizadores String, int, double (dependiendo del valor que retornan
Modificadores void
public int darX ()
{
 //Acciones
return x;
}
public void cambiarX (double pX)
{
 //Acciones
}

CASO DE ESTUDIO: EL Triángulo

Diseño de la solución: Métodos dentro de las clases

CASO DE ESTUDIO: EL Triángulo

Cliente

Tengo un problema ...

PROBLEMA

PROGRAMADOR

PROCESO

SOLUCión

PROGRAMA

Etapa 1

Etapa 2

Etapa N

USUARIO

Conjunto de etapas para entender el problema del cliente y construir una solución de buena calidad

  1. Análisis del problema.
  2. Especificación del problema.
  3. Diseño de la solución.
  4. Construcción de la solución.

Construcción de la solución

CASO DE ESTUDIO: El triángulo

  • Declarar atributos.
  • Declarar métodos.
  • Implementar cuerpo de métodos.

Construcción de la solución

CASO DE ESTUDIO: El triángulo

Construcción de la solución

/**
 * Clase que representa un color.
 */
public class Color
{

    // -----------------------------------------------------------------
    // Atributos
    // -----------------------------------------------------------------

    /**
     * Componente rojo del RGB (Red).
     */
    private int rojo;

    /**
     * Componente verde del RGB (Green).
     */
    private int verde;

    /**
     * Componente azul del RBG (Blue).
     */
    private int azul;

    // -----------------------------------------------------------------
    // Métodos
    // -----------------------------------------------------------------

    /**
     * Inicializa el color. <br>
     * <b>post: </b> Se inicializaron los atributos con los valores dados por parámetro.<br>
     * @param pRojo Valor rojo del RGB. pRojo >= 0.
     * @param pVerde Valor green de RGB. pVerde >= 0.
     * @param pAzul Valor blue de RGB. pAzul >= 0.
     */
    public Color( int pRojo, int pVerde, int pAzul )
    {
        rojo = pRojo;
        verde = pVerde;
        azul = pAzul;
    }

    /**
     * Devuelve la valor del componente rojo (R) en el color.
     * @return Valor del componente rojo.
     */
    public int darRojo( )
    {
        return rojo;
    }

    /**
     * Devuelve la valor del componente verde (G) en el color.
     * @return Valor del componente verde.
     */
    public int darVerde( )
    {
        return verde;
    }

    /**
     * Devuelve la valor del componente azul (B) en el color.
     * @return Valor del componente azul.
     */
    public int darAzul( )
    {
        return azul;
    }

    /**
     * Cambia el valor del componente rojo (R) en el color.
     * @param pRojo Nuevo valor rojo del RGB. pRojo>=0.
     */
    public void cambiarRojo( int pRojo )
    {
        rojo = pRojo;
    }

    /**
     * Cambia el valor del componente verde (G) en el color.
     * @param pVerde Nuevo valor verde del RGB. pVerde>=0.
     */
    public void cambiarVerde( int pVerde )
    {
        verde = pVerde;
    }

    /**
     * Cambia el valor del componente azul (B) en el color.
     * @param pAzul Nuevo valor azul del RGB. pAzul>=0.
     */
    public void cambiarAzul( int pAzul )
    {
        azul = pAzul;
    }

}

CASO DE ESTUDIO: El triángulo

Construcción de la solución

/**
 * Clase que representa un triángulo.
 */
public class Triangulo
{

    // -----------------------------------------------------------------
    // Atributos
    // -----------------------------------------------------------------

    /**
     * Primer punto del triángulo.
     */
    private Punto punto1;

    /**
     * Segundo punto del triángulo.
     */
    private Punto punto2;

    /**
     * Tercer punto del triángulo.
     */
    private Punto punto3;

    /**
     * Color de las líneas.
     */
    private Color colorLineas;

    /**
     * Color del relleno.
     */
    private Color colorRelleno;

    // -----------------------------------------------------------------
    // Métodos
    // -----------------------------------------------------------------

    /**
     * Inicializa el triángulo. <br>
     * <b>post: </b> Se inicializaron los atributos con los siguientes valores:<br>
     * Punto 1: 200, 50
     * Punto 2: 300, 200
     * Punto 3: 100, 200
     * Color relleno: 50, 168, 56
     * Color líneas: 0, 83, 24
     */
    public Triangulo(   )
    {
        // Inicializa los puntos

        punto1 = new Punto( 200, 50 );
        punto2 = new Punto( 300, 200 );
        punto3 = new Punto( 100, 200 );

        // Inicializa los colores
        colorRelleno = new Color( 60, 168, 56 );
        colorLineas = new Color( 0, 83, 24 );
    }

    /**
     * Retorna el punto 1 del triángulo.
     * @return Punto 1.
     */
    public Punto darPunto1( )
    {
        return punto1;
    }

    /**
     * Retorna el punto 2 del triángulo.
     * @return Punto 2.
     */
    public Punto darPunto2( )
    {
        return punto2;
    }

    /**
     * Retorna el punto 3 del triángulo.
     * @return Punto 3.
     */
    public Punto darPunto3( )
    {
        return punto3;
    }

    /**
     * Retorna el color de las líneas del triángulo.
     * @return Color de las líneas.
     */
    public Color darColorLineas( )
    {
        return colorLineas;
    }

    /**
     * Retorna el color del relleno del triángulo.
     * @return Color del relleno.
     */
    public Color darColorRelleno( )
    {
        return colorRelleno;
    }

    /**
     * Retorna el perímetro del triángulo.
     * @return Perímetro del triángulo.
     */
    public double darPerimetro( )
    {
        // Retorna la suma de todos los lados
        return calcularLado1( ) + calcularLado2( ) + calcularLado3( );
    }

    /**
     * Retorna el área del triángulo, calculada utilizando la formula de Herón. <br>
     * @return Área del triángulo.
     */
    public double darArea( )
    {
        // Calcula el valor S para la formula
        double perimetro = darPerimetro( );
        double s = perimetro / 2;

        // Calcula las restas para cada uno de los lados
        double valorLado1 = s - calcularLado1( );
        double valorLado2 = s - calcularLado2( );
        double valorLado3 = s - calcularLado3( );

        // Calcula y devuelve el área
        double area = Math.sqrt( s * valorLado1 * valorLado2 * valorLado3 );
        return area;
    }

    /**
     * Calcula la altura del triángulo, teniendo en cuenta como base la línea entre el punto 1 y 2.<br>
     * Tenga en cuenta que Área = (Base * Altura) / 2
     * @return Altura del triángulo.
     */
    public double darAltura( )
    {
        double area = darArea( );
        double base = calcularLado1( );
        double altura = ( area / base ) * 2;
        return altura;
    }

    /**
     * Calcula la distancia entre el punto 1 y 2.
     * @return Distancia entre el punto 1 y el punto 2.
     */
    private double calcularLado1( )
    {
        // Calcula las restas
        double valorX = Math.pow( punto1.darX( ) - punto2.darX( ), 2 );
        double valorY = Math.pow( punto1.darY( ) - punto2.darY( ), 2 );

        // calcula la distancia
        double distancia = Math.sqrt( valorX + valorY );
        return distancia;
    }

    /**
     * Calcula la distancia entre el punto 2 y 3.
     * @return Distancia entre el punto 2 y 3.
     */
    private double calcularLado2( )
    {
        // Calcula las restas
        double valorX = Math.pow( punto2.darX( ) - punto3.darX( ), 2 );
        double valorY = Math.pow( punto2.darY( ) - punto3.darY( ), 2 );

        // calcula la distancia
        double distancia = Math.sqrt( valorX + valorY );
        return distancia;
    }

    /**
     * Calcula la distancia entre el punto 3 y 1.
     * @return Distancia entre el punto 3 y 1.
     */
    private double calcularLado3( )
    {
        // Calcula las restas
        double valorX = Math.pow( punto3.darX( ) - punto1.darX( ), 2 );
        double valorY = Math.pow( punto3.darY( ) - punto1.darY( ), 2 );

        // calcula la distancia
        double distancia = Math.sqrt( valorX + valorY );
        return distancia;
    }

    /**
     * Calcula el ángulo opuesto entre un vértice de referencia y los otros dos vértices de un triángulo.
     * @param pX1 Coordenada X del vértice de referencia.
     * @param pY1 Coordenada Y del vértice de referencia.
     * @param pX2 Coordenada X del vértice opuesto 1.
     * @param pY2 Coordenada Y del vértice opuesto 1.
     * @param pX3 Coordenada X del vértice opuesto 2.
     * @param pY3 Coordenada Y del vértice opuesto 2.
     * @return Ángulo opuesto entre vértice de referencia y los otros dos vértices.
     */
    public double calcularAnguloOpuesto( double pX1, double pY1, double pX2, double pY2, double pX3, double pY3 )
    {
        // Ángulo 1
        double angulo1 = Math.atan2( pY2 - pY1, pX2 - pX1 );

        // Ángulo 2
        double angulo2 = Math.atan2( pY3 - pY1, pX3 - pX1 );

        // Garantiza que la diferencias de ángulos sea la más pequeña.
        if( Math.abs( angulo1 - angulo2 ) > Math.PI )
        {
            angulo1 = angulo1 < 0 ? angulo1 + 2.d * Math.PI : angulo1;
            angulo2 = angulo2 < 0 ? angulo2 + 2.d * Math.PI : angulo2;
        }

        // Calcula el ángulo opuesto
        double anguloOpuesto = ( angulo1 + angulo2 ) / 2.d + Math.PI;
        anguloOpuesto = anguloOpuesto % ( 2.d * Math.PI );
        return anguloOpuesto;
    }

    /**
     * Cambia el valor de la coordenada X y Y del punto 1.
     * @param pX Nuevo valor de la coordenada X. pX>0.
     * @param pY Nuevo valor de la coordenada Y. pY>0.
     */
    public void cambiarPunto1( double pX, double pY )
    {
        punto1.cambiarX( pX );
        punto1.cambiarY( pY );
    }

    /**
     * Cambia el valor de la coordenada X y Y del punto 2.
     * @param pX Nuevo valor de la coordenada X. pX>0.
     * @param pY Nuevo valor de la coordenada Y. pY>0.
     */
    public void cambiarPunto2( double pX, double pY )
    {
        punto2.cambiarX( pX );
        punto2.cambiarY( pY );
    }

    /**
     * Cambia el valor de la coordenada X y Y del punto 3.
     * @param pX Nuevo valor de la coordenada X. pX>0.
     * @param pY Nuevo valor de la coordenada Y. pY>0.
     */
    public void cambiarPunto3( double pX, double pY )
    {
        punto3.cambiarX( pX );
        punto3.cambiarY( pY );
    }

    /**
     * Cambia el color de relleno del triángulo.
     * @param pRojo Valor de componente rojo del RGB. pRojo>=0.
     * @param pVerde Valor de componente verde del RGB. pVerde>=0.
     * @param pAzul Valor de componente azul del RGB. pAzul>=0.
     */
    public void cambiarColorRelleno( int pRojo, int pVerde, int pAzul )
    {
        colorRelleno.cambiarRojo( pRojo );
        colorRelleno.cambiarVerde( pVerde );
        colorRelleno.cambiarAzul( pAzul );
    }

    /**
     * Cambia el color de la líneas del triángulo.
     * @param pRojo Valor de componente rojo del RGB. pRojo>=0.
     * @param pVerde Valor de componente verde del RGB. pVerde>=0.
     * @param pAzul Valor de componente azul del RGB. pAzul>=0.
     */
    public void cambiarColorLineas( int pRojo, int pVerde, int pAzul )
    {
        colorLineas.cambiarRojo( pRojo );
        colorLineas.cambiarVerde( pVerde );
        colorLineas.cambiarAzul( pAzul );
    }

    // -----------------------------------------------------------------
    // Puntos de Extensión
    // -----------------------------------------------------------------

    /**
     * Método para la extensión 1.
     * @return Respuesta 1.
     */
    public String metodo1( )
    {
        return "Respuesta 1";
    }

    /**
     * Método para la extensión 2.
     * @return Respuesta 2.
     */
    public String metodo2( )
    {
        return "Respuesta 2";
    }

}

¿PREGUNTAS?

¿PREGUNTAS?

Text

GRACIAS

  • J. Villalobos and R. Casallas, Fundamentos de Programación. https://cupi2.virtual.uniandes.edu.co/libro-del-curso-pdf/libro-completo
  • Iconos hechos por  Freepik, itim2101 de Flaticon son licenciados  por Creative Commons by 3.0

Nivel 2

By nychi713

Nivel 2

  • 642