.. py:module:: vec3D Classe Vec3D ============ La classe :py:class:`Vec3D` representa vectors lliures de l'espai 3D a través de les seves components x, y i z. Vegeu-ne l'especificació: .. py:class:: Vec3D(x=0., y=0., z=0.) .. rubric:: Atribut de classe .. py:attribute:: EPS Precisió de les operacions de comparacions entre vectors (valor = :math:`10^{-6}` ) .. rubric:: Atributs d'instància .. py:attribute:: x Component x del vector (:py:class:`float`) .. py:attribute:: y Component y del vector (:py:class:`float`) .. py:attribute:: z Component z del vector (:py:class:`float`) .. rubric:: Mètodes .. py:method:: norma() Retorna la norma (o mòdul) del vector. .. py:method:: normalitza() Retorna una nova instància de :py:class:`Vec3D` resultat de la normalització del vector Aquesta classe ha de suportar les **operacions** següents: +--------------------------+---------------------------------------------------------+ | Operació | Resultat | +==========================+=========================================================+ | ``v[i]`` | Retorna la component i-èssima del vector | | | :math:`0 \leq i<3` | +--------------------------+---------------------------------------------------------+ | ``v[i] = valor`` | Assigna `valor` a la component i-èssima del vector | | | :math:`0 \leq i<3` | +--------------------------+---------------------------------------------------------+ | ``-v`` | Retorna el vector oposat a `v` (:py:class:`Vec3D`) | +--------------------------+---------------------------------------------------------+ | ``v1 + v2`` | Retorna el vector suma dels vectors `v1` i `v2` | | | (:py:class:`Vec3D`) | +--------------------------+---------------------------------------------------------+ | ``v1 - v2`` | Retorna el vector resta dels vectors `v1` i `v2` | | | (:py:class:`Vec3D`) | +--------------------------+---------------------------------------------------------+ | ``v1*v2`` | Retorna el producte escalar de `v1` per `v2` | | | (:py:class:`float`) | +--------------------------+---------------------------------------------------------+ | ``k*v`` | Retorna el vector resultant de multiplicar `v` pel | | | :py:class:`float` `k` (:py:class:`Vec3D`) | +--------------------------+---------------------------------------------------------+ La classe suporta la funció :py:class:`str` que retorna l'expressió: '(x, y, z)' on x, y, z estan expressats en base 10 i amb un dígit darrera de la coma. La representació oficial del vector és un string de format 'Vec3D(x, y, z)' on x, y, z estan expressats en base 10 i amb 2 dígits darrera de la coma. La classe també suporta la comparació de vectors (==, !=, >, <, >= i <=). * Implementeu aquesta classe amb tots els mètodes especials necessaris per a donar suport a les operacions i funcions descrites. Cal tindre en compte que l'índex 0 d'un vector es correspon a la coordenada x, l'índex 1 amb y i l'índex 2 amb z. Per exemple: .. literalinclude:: test-vec3D.txt :language: python :start-after: --ini-coords :end-before: --fi-coords Pel que fa a la comparació de vectors, dins d'aquesta classe, es considera que un vector és més gran que un altre si la seva norma és superior. Dos vectors són iguals si les seves coordenades són iguals amb una precisió de :py:attr:`EPS`. Vegeu, per exemple: .. literalinclude:: test-vec3D.txt :language: python :start-after: --ini-compara :end-before: --fi-compara Finalment, mireu com es comporten els operadors: .. literalinclude:: test-vec3D.txt :language: python :start-after: --ini-opera :end-before: --fi-opera * En un intèrpret de python, proveu d'assignar un vector a un altre. Canvieu la coordenada x d'un dels dos. Com faríeu una còpia i no un àlies? Examineu aquesta part dels tests i assegureu-vos que l'enteneu: .. literalinclude:: test-vec3D.txt :language: python :start-after: --ini-copia :end-before: --fi-copia .. note:: Disposeu de jocs de prova de l'exercici al fitxer :download:`test-vec3D.txt` i d'una solució a :download:`vec3D.py`.