Python | Implementación de vectores 3D usando métodos dunder

Los métodos Dunder ( d ouble under score) en Python son métodos que se usan comúnmente para la sobrecarga de operadores. Algunos ejemplos de métodos de dunder son __init__ , __repr__ , __add__ , __str__ etc. Estos métodos son útiles para modificar el comportamiento de un objeto. 
Por ejemplo, cuando se usa el operador ‘+’ entre dos números, el resultado obtenido es simplemente la suma de los dos números, mientras que cuando se usa ‘+’ entre dos strings, el resultado obtenido es la concatenación de las dos strings.
Operaciones vectoriales de uso común: 
considere dos vectores vec1 y vec2 con coordenadas: vec1 = (x1, y1, z1) y vec2 = (x2, y2, z2).
 

  • Magnitud: Magnitud de vec1 =  \sqrt{(x1)^2 + (y1)^2 + (z1)^2}
     
  • Adición: para esta operación, necesitamos el método __add__ para agregar dos objetos vectoriales. 
    vec1 + vec2 = vec3 donde las coordenadas de vec3 son  (x1+x2, y1+y2, z1+z2)
     
  • Resta: para esta operación, necesitamos el método __sub__ para restar dos objetos vectoriales. 
    vec1 - vec2 = vec3 donde las coordenadas de vec3 son  (x1-x2, y1-y2, z1-z2)
     
  • Producto escalar: Para esta operación, necesitamos el método __xor__ ya que estamos usando el símbolo ‘^’ para indicar el producto escalar. vec1 vec2 = vec3 donde están las coordenadas de vec3  (x1*x2, y1*y2, z1*z2)
     
  • Producto cruzado: para esta operación, necesitamos el método __mul__ ya que estamos usando el símbolo ‘*’ para indicar el producto cruzado. vec1 vec2 = vec3 donde las coordenadas de vec3 son  (y1*z2 - y2*z1, x1*z2 - x2*z1, x1*y2 - x2*y1)
     

Finalmente, también necesitamos un método __init__ para inicializar las coordenadas del Vector y el método __repr__ para definir la representación del objeto Vector. Entonces, cuando imprimimos nuestro objeto Vector, la salida debería ser algo como esto. print(Vector(1, -2, 3)) ==> Salida: 1i -2j + 3k 
A continuación se muestra la implementación:
 

Python3

# Python3 program to implement 3-D Vectors.
from math import sqrt
 
# Definition of Vector class
class Vector:
 
    # Initialize 3D Coordinates of the Vector
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
 
    # Method to calculate magnitude of a Vector
    def magnitude(self):
 
        return sqrt(self.x ** 2 + self.y ** 2 + self.z ** 2)
 
    # Method to add to Vector
    def __add__(self, V):
 
        return Vector(self.x + V.x, self.y + V.y, self.z + V.z)
 
    # Method to subtract 2 Vectors
    def __sub__(self, V):
 
        return Vector(self.x - V.x, self.y - V.y, self.z - V.z)
 
    # Method to calculate the dot product of two Vectors
    def __xor__(self, V):
 
        return self.x * V.x + self.y * V.y + self.z * V.z
 
    # Method to calculate the cross product of 2 Vectors
    def __mul__(self, V):
 
        return Vector(self.y * V.z - self.z * V.y,
                      self.z * V.x - self.x * V.z,
                      self.x * V.y - self.y * V.x)
 
    # Method to define the representation of the Vector
    def __repr__(self):
 
        out = str(self.x) + "i "
 
        if self.y >= 0:
            out += "+ "
        out += str(self.y) + "j "
        if self.z >= 0:
            out += "+ "
        out += str(self.z) + "k"
 
        return out
 
 
if __name__ == "__main__":
 
    vec1 = Vector(1, 2, 2)
    vec2 = Vector(3, 1, 2)
 
    # Magnitude of vector1
    print("Magnitude of vector1:", vec1.magnitude())
 
    # String representation of vector
    print("String representation of vector1: " + str(vec1))
 
    # Addition of two vectors
    print("Addition of vector1 and vector2: " + str(vec1 + vec2))
 
    # Subtraction of two vectors
    print("Subtraction of vector1 and vector2: " + str(vec1 - vec2))
 
    # Dot product of two vectors
    print("Dot Product of vector1 and vector2: " + str(vec1 ^ vec2))
 
    # Cross product of two vectors
    print("Cross Product of vector1 and vector2: " + str(vec1 * vec2))
Producción

Magnitude of vector1: 3.0
String representation of vector1: 1i + 2j + 2k
Addition of vector1 and vector2: 4i + 3j + 4k
Subtraction of vector1 and vector2: -2i + 1j + 0k
Dot Product of vector1 and vector2: 9
Cross Product of vector1 and vector2: 2i + 4j -5k

Publicación traducida automáticamente

Artículo escrito por rituraj_jain y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *