-
Notifications
You must be signed in to change notification settings - Fork 0
/
punto.py
77 lines (63 loc) · 2.11 KB
/
punto.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import math
class Punto:
def __init__(self,x1,y1,z1):
self.x = x1
self.y = y1
self.z = z1
#w es el factor de correcion
def suma(self, p2, w):
if w == 0:
w = 1
x = (self.x + p2.x) / w
y = (self.y + p2.y) / w
z = (self.z + p2.z) / w
return Punto(x, y, z)
#w es el factor de correcion
def resta(self, p2, w):
if w == 0:
w = 1
x = (self.x - p2.x) / w
y = (self.y - p2.y) / w
z = (self.z - p2.z) / w
pt = Punto(x, y, z)
# if( pt.modulo() == 0):
# print "la resta es cero ",pt.x,"--",pt.y,"--",pt.z
return pt
def cruz(self, p2):
#calculo los puntos segun la notacion matricial
x = self.y * p2.z - self.z * p2.y
y = self.z * p2.x - self.x * p2.z
z = self.x * p2.y - self.y * p2.x
#y lo retornamos como punto
return Punto(x, y, z)
# producto punto entre dos Puntos, como si fueran vectores
def producto(self,p2):
sx = self.x*p2.x
sy = self.y*p2.y
sz = self.z*p2.z
return (float)(sx+sy+sz)
# modulo de Punto, como si fuera un vector
def modulo(self):
aux = math.sqrt(self.producto(self))
# if(aux == 0):
# print "modulo es cero ",self.x,"--",self.y,"--",self.z
return aux
def imprimir(self, name):
x = self.x
y = self.y
z = self.z
print name + ": x = {0}, y = {1}, z = {2}".format(x, y, z)
# calcula angulo entre dos puntos, como si fueran vectores
def anguloEntre(self,p2):
v = self
w = p2
acosval = (v.producto(w))/(v.modulo()*w.modulo())
if( acosval < -1):
acosval = -1.0
if( acosval > 1 ):
acosval = 1.0
theta = math.acos(acosval)
return theta
def normalizar(self):
mod = self.modulo()
return Punto(self.x/mod , self.y/mod , self.z/mod)