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;
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


0