1. Posicions d’una fresa

Avís

Per a resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.

Una fresadora de control numèric envia al controlador una seqüència de zeros, uns i menys uns (0, 1, -1). Aquests nombres, agrupats de tres en tres, representen el desplaçament de la fresa en els eixos \(x\), \(y\) i \(z\) respectivament. Per exemple, si el controlador rep la seqüència 1 0 0 0 0 -1, els tres primers nombres indequen que la fresa s’ha desplaçat 1 unitat en l’eix \(x\) i els tres enters següents indiquen que s’ha desplaçat -1 unitat en l’eix \(z\).

A partir de la posició inicial de la fresa (en coordenades 3D) i una seqüència de desplaçaments com l’anterior, es pot calcular la seqüència de posicions de la fresa. Seguint l’exemple anterior, si la posició inicial és la (3, 1, 7), després del primer desplaçament la fresa estarà a la posició (4, 1, 7) i després del segon a (4, 1, 6).

Dissenya la funció següent i desa-la al mòdul posicions (fitxer posicions.py):

posicions.posicions_fresa(origen, desp)

Calcula l’iterador de les posicions de la fresa a partir del punt origen i de l’iterador de desplaçaments desp.

Paràmetres:
  • origen (tuple[int, int, int]) – coordenades 3D del punt inicial.

  • desp – iterador de 0, 1 i -1 que, agrupats de tres en tres, indiquen els desplaçaments de la fresa en els eixos \(x\), \(y\) i \(z\).

Retorna:

iterador de les posicions 3D de la fresa. Les posicions són tuples de 3 enters, les coordenades \(x\), \(y\) i \(z\).

Per exemple,


>>> desp1 = [1, 0, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0]
>>> desp1_it = iter(desp1)
>>> p1_it = posicions_fresa((0, 0, 0), desp1_it)
>>> list(p1_it)
[(0, 0, 0), (1, 0, 0), (1, 0, -1), (1, 1, -1), (2, 1, -1)]

Disposes d’un joc de proves més complet al fitxer tests-posicions.txt.