Java - AYUDA

 
Vista:

AYUDA

Publicado por Carla (2 intervenciones) el 16/03/2023 19:29:45
1. Añada un método para cambiar los atributos cuando se recibe una señal que detecta que el Satelite está en la Posicion pos en el tiempo t.
public void detectadoEn(Posicion pos, long t)
Si pos es nulo no hay que hacer nada. Si el parámetro t es igual al que tiene almacenado en el atributo this.t, simplemente cambie this.pos para que apunte al parámetro pos. En el resto de casos, copie this.pos en this.pos0, y this.t en this.t0, y ponga en this.pos el valor del parámetro pos, y en this.t el valor del parámetro t.
2. Añada un nuevo método para hacer que el Satelite se mueva con la velocidad que llevara, hasta el valor del tiempo t.
public void mueveHasta (long t)
Si t tiene el mismo valor que this.t no hace falta hacer nada más. En caso contrario, vamos a intentar cambiar la Posicion del Satelite, de acuerdo a la velocidad que llevaba, ya sea velocidad angular en el caso de latitud y longitud, o velocidad lineal en la altura. Puede calcular la velocidad basándose en los valores de tiempo this.t y this.t0 y las Posiciones this.pos y this.pos0; corresponden a la última y penúltima vez que ha sido detectado el Satelite.
¿ Qué pasa si this.t y this.t0 tienen el mismo valor ? que no podemos calcular el denominador para la velocidad (diferencia de coordenadas dividido por diferencia de tiempos), así que en este caso el Satelite no se moverá de la última Posicion this.pos. Cree una nueva Posicion con los mismos atributos que tiene this.pos.
Por el contrario, si podemos calcular la velocidad (la diferencia de tiempos no es 0), cree una nueva Posicion en la que el valor de cada atributo será el de this.pos, a lo que se le sumará el tiempo transcurrido entre t y this.t, multiplicado por la
2
velocidad en ese atributo (por ejemplo, la diferencia de latitud entre this.pos y this.pos0, dividido por la diferencia de tiempo entre this.t y this.t0).
Una vez tenga esta nueva Posicion, calculada de una forma u otra, puede llamar a this.detectadoEn pasándola como parámetro, y también el tiempo t.
3. Escriba un método que indica si la Posicion que se pasa como parámetro está muy cerca -es compatible- con la Posicion de este Satelite.
public boolean isCompatible (Posicion p)
Si el parámetro es nulo, devuelve false; en caso contrario devuelve el resultado de comprobar si la distancia entre this.pos y el parámetro p es menor que la constante ERROR_POS.
final static double ERROR_POS = 5;
4. Añada un método para saber si este Satelite está en peligro porque puede
colisionar con otro que se pasa como parámetro.
Desde luego si el parámetro es nulo se puede devolver false sin más. Si al llamar a this.isCompatible con la Posicion del otro devuelve true, está en peligro y devuelve true -la colisión es inminente porque están muy cerca.
public boolean enPeligro(Satelite otro)
Para el resto de casos, cree un nuevo Satelite con los mismos atributos que otro; llame a su método mueveHasta con el parámetro de tiempo otro.getT() más SAFETY_TIME; después cree un nuevo Satelite con los mismos atributos de this y muévalo igualmente this.getT() + SAFETY_TIME. Devuelva el resultado de llamar a isCompatible entre los dos nuevos Satelites que hemos movido; esto significará que los dos Satelites colisionarán o no dentro de SAFETY_TIME unidades de tiempo.
final static long SAFETY_TIME = 100;

Mi clase satélite es esta:

public class Satelite {

private String id;
private Posicion pos;
private long t;
private Posicion pos0;
private long t0;

public Satelite(String id, Posicion pos, long t, Posicion pos0, long t0) {
this.id = id;
this.pos = pos;
this.t = t;
this.pos0 = pos0;
this.t0 = t0;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

AYUDA

Publicado por Kabuto (1383 intervenciones) el 17/03/2023 17:24:00
Hola.
Intenta tú desarrollar esos métodos y cuando te atasques, haz preguntas concretas para saber como continuar.

De hecho, prácticamente es seguir lo que dicta el enunciado paso a paso.
Te pongo como ejemplo el primer método:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
	 * 1. Añada un método para cambiar los atributos cuando se recibe una señal que detecta
	 * que el Satelite está en la Posicion pos en el tiempo t.
	 * public void detectadoEn(Posicion pos, long t)
	 * Si pos es nulo no hay que hacer nada.
	 * Si el parámetro t es igual al que tiene almacenado en el atributo this.t,
	 * simplemente cambie this.pos para que apunte al parámetro pos.
	 * En el resto de casos, copie this.pos en this.pos0, y this.t en this.t0,
	 * y ponga en this.pos el valor del parámetro pos, y en this.t el valor del parámetro t.
	 */
 
	public void detectadoEn(Posicion pos, long t) {
		if (pos != null) { //Solo actuamos si pos es distinto de null
			if (this.t == t)
				this.pos = pos;
			else {
				this.pos0 = this.pos;
				this.t0 = this.t;
				this.pos = pos;
				this.t = t;
			}
		}
	}

Intenta tú el resto y dinos donde te atascas.

Por cierto, para poder ayudarte mejor convendría que supieramos como es la clase Posicion
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

AYUDA

Publicado por Carla (2 intervenciones) el 17/03/2023 17:31:20
Muchas gracias, si intentaré seguir yo.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar