Python|使用 dunder 方法实现 3D 矢量
Python中的Dunder方法( double under score )是常用于运算符重载的方法。 dunder 方法的一些示例是 __init__ 、 __repr__ 、 __add__ 、 __str__ 等。这些方法对于修改对象的行为很有用。
例如,当两个数字之间使用'+'运算符时,得到的结果只是两个数字相加,而当两个字符串之间使用'+'时,得到的结果是两个字符串的连接。
常用的向量运算:
考虑两个具有坐标的向量vec1和vec2 :vec1 = (x1, y1, z1) 和 vec2 = (x2, y2, z2)。
- 幅度: vec1 的幅度 = .
- 加法:对于这个操作,我们需要 __add__ 方法来添加两个 Vector 对象。
vec3 的坐标在哪里 . - 减法:对于这个操作,我们需要 __sub__ 方法来减去两个 Vector 对象。
vec3 的坐标在哪里 . - 点积:对于这个操作,我们需要 __xor__ 方法,因为我们使用 '^' 符号来表示点积。 ^ vec3 的坐标在哪里 .
- 叉积:对于这个操作,我们需要 __mul__ 方法,因为我们使用“*”符号来表示叉积。 * vec3 的坐标在哪里 .
最后,我们还需要一个 __init__ 方法来初始化 Vector 坐标和 __repr__ 方法来定义 Vector 对象的表示。所以当我们打印我们的 Vector 对象时,输出应该是这样的。 print(Vector(1, -2, 3)) ==>输出: 1i -2j + 3k
下面是实现:
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))
输出
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