N1: PROBLEMAS, SOLUCIONES y programas
Nychol Bazurto Gómez


Problemas y
Nivel
1
Comprensión y especificación del problema
Elementos de un
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
Algoritmo para enviar un mensaje por Whatsapp.
Algoritmo para preparar un desayuno.



Algoritmo para ir a una fiesta.
Elementos de un programa: Algoritmos



ALGOrItMO
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

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 elmismo 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
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
¿Cómo
¿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
- Análisis del problema.
- Especificación del problema.
- Diseño de la solución.
- 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
"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
- Análisis del problema.
- Especificación del problema.
- Diseño de la solución.
- 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