3. A prop del port (4 punts)¶
Disposem d’un fitxer amb informació de les posicions i les velocitats d’un vaixell en diferents moments de temps. De fet, cada fila del fitxer ens dona coordenada x de la posició, coordenada y de la posició, el mòdul de la velocitat i l’angle que forma el vector velocitat en un cert moment. Dues files consecutives corresponen a dades agafades en una diferència de temps de 10 segons.
Considerarem que el vaixell és al punt d’amarratge quan dues posicions
consecutives són prou properes, és a dir, quan la distància entre dues
posicions corresponents a temps consecutius és menor que un cert
paràmetre eps donat.
Pots descarregar el fitxer d’exemple dades_vaixell.txt amb el següent contingut:
24.2: 45.1: 17.3: 134
24.9: 50.3: 17.1: 146
30.4: 60.2: 15.3: 175
32.5: 61.2: 15.1: 182
33.1: 61.6: 15 : 183
33.4: 61.7: 15: 182
33.6: 61.9: 13.4: 206
33.6: 61.91: 11.8: 224
33.69: 61.94: 11.5: 228
Observeu que en cada línia hi ha la coordenada x de la posició, la
coordenada y, el mòdul de la velocitat i l’angle, tot separat pel
caràcter : seguit d’un espai en blanc. Per exemple, la primera
dada que tenim del vaixell és que està en la posició \((24.2,
45.1)\), el mòdul de la velocitat que porta és \(17.3\) i el
darrer valor fa referència a l’angle del vector velocitat.
En primer lloc, implementa una funció anomenada
- sensors.distancia(x1, y1, x2, y2)¶
tal que donats quatre reals, corresponents a dos punts \((x1,
y1)\) i \((x2, y2)\) calculi la distància entre aquests dos
punts. La solució s’ha de lliurar a la tasca d’Atenea en el fitxer
sensors.py. La funció ha de passar el següent doctest:
>>> round(distancia(2, 0.4, 0, 0), 1) 2.0 >>> round(distancia(2, 4, 0.4, 4.1), 1) 1.6
Utilitzant aquesta funció, dissenya la funció
- sensors.velocitat_port(nomf, eps)¶
on nomf és un string amb el nom d’un fitxer com l’indicat i
eps és un real que representa un llindar a partir del qual podrem
dir que dos punts són prou propers. La funció ha de retornar el mòdul de la
velocitat en què va el vaixell quan per primer cop la distància el
punt (coord_x, coord_y) del punt i el seu consecutiu és menor que
el llindar eps donat (és a dir, la velocitat del primer punt). En cas que no trobi cap parella de punts que ho satisfacin, la funció retornarà -1.0.
Desa la funció al fitxer sensors.py i puja’l a Atenea. Observa el
següent joc de proves:
>>> velocitat_port('dades_vaixell.txt', 0.51)
15.0
>>> velocitat_port('dades_vaixell.txt', 1)
15.1
>>> velocitat_port('dades_vaixell.txt', 3)
15.3
>>> velocitat_port('dades_vaixell.txt', 0.1)
13.4
>>> velocitat_port('dades_vaixell.txt', 0.001)
-1.0
Nota
Pots descarregar el fitxer amb tests test-sensor.txt
Avís
Els tests proporcionats són només exemples per ajudar a entendre i resoldre el problema. Que la funció superi aquests tests no significa que la funció sigui correcta ni garanteix cap nota. La funció ha de resoldre totes les qüestions plantejades a l’enunciat surtin o no als tests.
Pots trobar una solució a sensors.py