OpenMPCD
Vector3D.py
1 import math
2 
3 class Vector3D:
4  def __init__(self, x, y, z):
5  self.x = complex(x)
6  self.y = complex(y)
7  self.z = complex(z)
8 
9  def getX(self):
10  return self.x
11 
12  def getY(self):
13  return self.y
14 
15  def getZ(self):
16  return self.z
17 
18  def getRealPart(self):
19  ret = Vector3D(0, 0, 0)
20  ret.x = self.x.real
21  ret.y = self.y.real
22  ret.z = self.z.real
23 
24  return ret
25 
26  def getComplexConjugate(self):
27  return Vector3D(self.x.conjugate(), self.y.conjugate(), self.z.conjugate())
28 
29  def dot(self, rhs):
30  return self.x.conjugate() * rhs.x + self.y.conjugate() * rhs.y + self.z.conjugate() * rhs.z
31 
32  def cross(self, rhs):
33  cx = self.y * rhs.z - self.z * rhs.y;
34  cy = self.z * rhs.x - self.x * rhs.z;
35  cz = self.x * rhs.y - self.y * rhs.x;
36  return Vector3D(cx, cy, cz)
37 
38  def getLengthSquared(self):
39  return self.dot(self).real
40 
41  def getLength(self):
42  return math.sqrt(self.getLengthSquared())
43 
44  def getNormalized(self):
45  factor = 1.0 / self.getLength()
46  return Vector3D(self.x * factor, self.y * factor, self.z * factor)
47 
48  def normalize(self):
49  factor = 1.0 / self.getLength()
50  self.x = self.x * factor
51  self.y = self.y * factor
52  self.z = self.z * factor
53 
54  def getProjectionOnto(self, rhs):
55  normalized = rhs.getNormalized()
56  return normalized * normalized.dot(self)
57 
58  def getPerpendicularTo(self, rhs):
59  return self -self.getProjectionOnto(rhs)
60 
61  def getRotatedAroundNormalizedAxis(self, axis, angle):
62  thisDotAxis = self.dot(axis)
63  axisCrossThis = axis.cross(self)
64  projectionOntoAxis = axis * thisDotAxis
65  return \
66  projectionOntoAxis + \
67  (self -projectionOntoAxis) * math.cos(angle) + \
68  axisCrossThis * math.sin(angle)
69 
70  def rotateAroundNormalizedAxis(self, axis, angle):
71  rotated = self.getRotatedAroundNormalizedAxis(axis, angle)
72  self.x = rotated.x
73  self.y = rotated.y
74  self.z = rotated.z
75 
76  def __eq__(self, rhs):
77  if self.x != rhs.x:
78  return False
79  if self.y != rhs.y:
80  return False
81  if self.z != rhs.z:
82  return False
83  return True
84 
85  def __add__(self, rhs):
86  if not isinstance(rhs, Vector3D):
87  return NotImplemented
88 
89  return Vector3D(self.x + rhs.x, self.y + rhs.y, self.z + rhs.z)
90 
91  def __sub__(self, rhs):
92  if not isinstance(rhs, Vector3D):
93  return NotImplemented
94 
95  return Vector3D(self.x - rhs.x, self.y - rhs.y, self.z - rhs.z)
96 
97  def __mul__(self, rhs):
98  if isinstance(rhs, float) or isinstance(rhs, int) or isinstance(rhs, complex):
99  return Vector3D(self.x * rhs, self.y * rhs, self.z * rhs)
100  else:
101  return NotImplemented
102 
103  def __div__(self, rhs):
104  if isinstance(rhs, float) or isinstance(rhs, int) or isinstance(rhs, complex):
105  return Vector3D(self.x / rhs, self.y / rhs, self.z / rhs)
106  else:
107  return NotImplemented
108 
109  def __getitem__(self, index):
110  if index == 0:
111  return self.getX()
112 
113  if index == 1:
114  return self.getY()
115 
116  if index == 2:
117  return self.getZ()
118 
119  raise ValueError("invalid index")
120 
121  def __str__(self):
122  return "(" + str(self.x) + ", " + str(self.y) + ", " + str(self.z) + ")"
123 
124  def __repr__(self):
125  return self.__str__()
MPCDAnalysis.Vector3D.Vector3D.getRotatedAroundNormalizedAxis
def getRotatedAroundNormalizedAxis(self, axis, angle)
Definition: Vector3D.py:61
MPCDAnalysis.Vector3D.Vector3D.getProjectionOnto
def getProjectionOnto(self, rhs)
Definition: Vector3D.py:54
MPCDAnalysis.Vector3D.Vector3D.dot
def dot(self, rhs)
Definition: Vector3D.py:29
MPCDAnalysis.Vector3D.Vector3D.getLength
def getLength(self)
Definition: Vector3D.py:41
MPCDAnalysis.Vector3D.Vector3D.z
z
Definition: Vector3D.py:7
MPCDAnalysis.Vector3D.Vector3D.getY
def getY(self)
Definition: Vector3D.py:12
MPCDAnalysis.Vector3D.Vector3D.x
x
Definition: Vector3D.py:5
MPCDAnalysis.Vector3D.Vector3D.y
y
Definition: Vector3D.py:6
MPCDAnalysis.Vector3D.Vector3D.getX
def getX(self)
Definition: Vector3D.py:9
MPCDAnalysis.Vector3D.Vector3D
Definition: Vector3D.py:3
MPCDAnalysis.Vector3D.Vector3D.getZ
def getZ(self)
Definition: Vector3D.py:15
MPCDAnalysis.Vector3D.Vector3D.__str__
def __str__(self)
Definition: Vector3D.py:121
MPCDAnalysis.Vector3D.Vector3D.getLengthSquared
def getLengthSquared(self)
Definition: Vector3D.py:38