Classe Vec3D¶
La classe Vec3D representa vectors lliures de l’espai 3D a través de les seves components x, y i z. Vegeu-ne l’especificació:
- class vec3D.Vec3D(x=0., y=0., z=0.)¶
Atribut de classe
- EPS¶
Precisió de les operacions de comparacions entre vectors (valor = \(10^{-6}\) )
Atributs d’instància
Mètodes
- norma()¶
Retorna la norma (o mòdul) del vector.
Aquesta classe ha de suportar les operacions següents:
Operació
Resultat
v[i]Retorna la component i-èssima del vector \(0 \leq i<3\)
v[i] = valorAssigna valor a la component i-èssima del vector \(0 \leq i<3\)
-vRetorna el vector oposat a v (
Vec3D)v1 + v2Retorna el vector suma dels vectors v1 i v2 (
Vec3D)v1 - v2Retorna el vector resta dels vectors v1 i v2 (
Vec3D)v1*v2Retorna el producte escalar de v1 per v2 (
float)k*vRetorna el vector resultant de multiplicar v pel
floatk (Vec3D)La classe suporta la funció
strque 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:
>>> v = Vec3D(1, 2, 3) >>> (v.x, v.y, v.z) (1, 2, 3) >>> (v[0], v[1], v[2]) (1, 2, 3)
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
EPS. Vegeu, per exemple:>>> v = Vec3D(1, 2, 3) >>> v1 = Vec3D(1., 2., 3.) >>> v1 == v True >>> v2 = Vec3D(1.00001, 2, 3) >>> v2 == v False >>> v3 = Vec3D(1.000001, 2, 3) >>> v3 == v True
Finalment, mireu com es comporten els operadors:
>>> v1 = Vec3D(1, 3, -0.806) >>> -v1 Vec3D(-1.00, -3.00, 0.81) >>> v1-v1 Vec3D(0.00, 0.00, 0.00) >>> v1+v1 Vec3D(2.00, 6.00, -1.61) >>> 3*v1 Vec3D(3.00, 9.00, -2.42)
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:
>>> u = Vec3D(0.27, 0.53, 0.80) >>> w = u >>> w Vec3D(0.27, 0.53, 0.80) >>> w.x = 9 >>> w Vec3D(9.00, 0.53, 0.80) >>> u Vec3D(9.00, 0.53, 0.80) >>> from copy import copy >>> u = copy(w) >>> u.z = 32 >>> u Vec3D(9.00, 0.53, 32.00) >>> w Vec3D(9.00, 0.53, 0.80)
Nota
Disposeu de jocs de prova de l’exercici al fitxer test-vec3D.txt i d’una solució a vec3D.py.