Foros del Web » Programando para Internet » Python »

[Aporte] Vectores en 3D

Estas en el tema de [Aporte] Vectores en 3D en el foro de Python en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código Python: Ver original from math import acos , degrees   class vector3D ( object ) :     def __init__ ( self ...
  #1 (permalink)  
Antiguo 17/10/2010, 16:33
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
[Aporte] Vectores en 3D

Código Python:
Ver original
  1. from math import acos, degrees
  2.  
  3. class vector3D(object):
  4.     def __init__(self, x=0, y=0, z=0):
  5.         """
  6.            Si, esto es un constructor
  7.        """
  8.         self.x = x
  9.         self.y = y
  10.         self.z = z
  11.         self.presicion = 2
  12.    
  13.     def __add__(self, vect):
  14.         """
  15.            Suma de vectores:
  16.            v1 = <x1, y1, z1>
  17.            v2 = <x2, y2, z2>
  18.            regresa v3 = <x1 + x2, y1 + y2, z1 + z2>
  19.        """
  20.         return vector3D(self.x + vect.x, self.y + vect.y, self.z + vect.z)
  21.    
  22.     def __iadd__(self, vect):
  23.         """
  24.            Suma de vectores in-place
  25.            v1 = <x1, y1, z1>
  26.            v2 = <x2, y2, z2>
  27.            v3 = <x1 + x2, y1 + y2, z1 + z2>
  28.        """
  29.         self.x += vect.x
  30.         self.y += vect.y
  31.         self.z += vect.z
  32.    
  33.     def __sub__(self, vect):
  34.         """
  35.            Resta de vectores:
  36.            v1 = <x1, y1, z1>
  37.            v2 = <x2, y2, z2>
  38.            v3 = <x1 - x2, y1 - y2, z1 - z2>
  39.        """
  40.         return vector3D(self.x - vect.x, self.y - vect.y, self.z - vect.z)
  41.    
  42.     def __isub__(self, vect):
  43.         """
  44.            Resta de vectores in-place
  45.        """
  46.         self.x -= vect.x
  47.         self.y -= vect.y
  48.         self.z -= vect.z
  49.        
  50.     def __mul__(self, vect):
  51.         """
  52.            Producto vectorial
  53.        """
  54.         xn = self.y * vect.z - self.z * vect.y
  55.         yn = self.z * vect.x - self.x * vect.z
  56.         zn = self.x * vect.y - self.y * vect.x
  57.         return vector3D(xn, yn, zn)
  58.    
  59.     def __rmul__(self, k):
  60.         return vector3D(self.x * k, self.y * k, self.z * k)
  61.    
  62.     def __radd(self, k):
  63.         return vector3D(self.x + k, self.y + k, self.z + k)
  64.    
  65.     def __imul__(self, vect):
  66.         """
  67.            Producto vectorial in-place
  68.        """
  69.         xn = self.y * vect.z - self.z * vect.y
  70.         yn = self.z * vect.x - self.x * vect.z
  71.         zn = self.x * vect.y - self.y * vect.x
  72.         self.x = xn
  73.         self.y = yn
  74.         self.z = zn
  75.    
  76.     def __mod__(self, vect):
  77.         """
  78.            Producto punto:
  79.            v1 = <x1, y1, z1>
  80.            v2 = <x2, y2, z2>
  81.            producto_punto = x1 * x2 + y1 * y2 + z1 * z2
  82.        """
  83.         return self.x * vect.x + self.y * vect.y + self.z * vect.z
  84.    
  85.     def __str__(self):
  86.         """
  87.            Representacion del objeto en una cadena
  88.        """
  89.         return "Vector: <%.*f, %.*f, %.*f>" % (self.presicion, self.x,
  90.                                                self.presicion, self.y,
  91.                                                self.presicion, self.z)
  92.    
  93.     def __repr__(self):
  94.         """
  95.            Manda a llamar a __str__ y regresa el valor de __str__
  96.        """
  97.         return self.__str__()
  98.    
  99.     def __unicode__(self):
  100.         """
  101.            Lo mismo que __str__ pero en unicode
  102.        """
  103.         return unicode(self.__str__())
  104.    
  105.     def __nonzero__(self):
  106.         """
  107.            Si la magnitud del vector es 0 entonces es falso
  108.            de otra manera verdadero
  109.        """
  110.         return self.x or self.y or self.z
  111.    
  112.     def __getlen(self):
  113.         """
  114.            getter para la magnitud del vector
  115.        """
  116.         return (self.x ** 2 + self.y ** 2 + self.z ** 2) ** .5
  117.    
  118.     def angle(self, vect, rad=False):
  119.         """
  120.            Regresa el angulo entre 2 vectores
  121.        """
  122.         an = acos(self % vect / float(self.len * vect.len))
  123.         if rad:
  124.             return an
  125.         else:
  126.             return degrees(an)
  127.        
  128.     len = property(__getlen, doc="Regresa la magnitud del vector")
  129.    
  130.  
  131. def main():
  132.     v1 = vector3D(1, 0, 0)
  133.     v2 = vector3D(0, 1, 0)
  134.     v3 = vector3D()
  135.     print "V1 =", v1
  136.     print "V2 =", v2
  137.     print "V3 =", v3
  138.     print ""
  139.    
  140.     print "V1 + V2 =", v1 + v2   #Suma de vectores
  141.     print "V1 * V2 =", v1 * v2   #Producto cruz
  142.     print "V1 % V2 =", v1 % v2   #Producto punto
  143.     print "|V1| =", v1.len       #Magnitud del vector
  144.     print "bool(V1) =", bool(v1) #Ver si un vector es falso o verdadero
  145.     print "bool(V3) = ", bool(v3)
  146.     v3 = v1 + v2
  147.     print "V3 = V1 + V2"
  148.     print "V3 =", v3
  149.     print "3 * V3 =", 3 * v3
  150.     print "Angulo entre V1 y V2 =", v1.angle(v2)
  151.  
  152. if __name__ == "__main__":
  153.     main()

Etiquetas: vectores, aportes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:40.