Brauche Hilfe bei Python in PB Übersetzung
Verfasst: 16.09.2007 09:42
Hallo Leute,
ich versuche den folgenden Code in PB zu übersetzen, komme aber jetzt irgendwie nicht weiter, währe also super wenn ihr mir weiterhelfen könntet.
Ihr müsst nicht direkt den ganzen Code 100% übersetzen, wie ihr seht hab ich auch nur bruchstückhaft angefangen, aber jeder Schritt zählt.
Wichtig! Im Code sollten die Variablen, ect. erhalten bleiben, da er nachher in einige andere eingefügt werden soll.
Gruß
Scarabol
ich versuche den folgenden Code in PB zu übersetzen, komme aber jetzt irgendwie nicht weiter, währe also super wenn ihr mir weiterhelfen könntet.
Ihr müsst nicht direkt den ganzen Code 100% übersetzen, wie ihr seht hab ich auch nur bruchstückhaft angefangen, aber jeder Schritt zählt.
Wichtig! Im Code sollten die Variablen, ect. erhalten bleiben, da er nachher in einige andere eingefügt werden soll.
Code: Alles auswählen
#E = 2.718281828459
Import math
class Vector:
rep = 0
Procedure __init__(self, x, y=0, z=0, w=0)
If y = 0
self.rep = tuple(x)
ElseIf z = 0
self.rep = (x, y)
ElseIf w = 0
self.rep = (x, y, z)
Else
self.rep = (x, y, z, w)
EndProcedure
; math functions
Procedure __add__(self, other)
ProcedureReturn Vector(map(lambda a, b: a + b, self.rep, other.rep))
EndProcedure
Procedure __sub__(self, other)
ProcedureReturn Vector(map(lambda a, b: a - b, self.rep, other.rep))
EndProcedure
Procedure __mul__(self, value)
ProcedureReturn Vector(map(lambda x: x * value, self.rep))
EndProcedure
Procedure __div__(self, value)
ProcedureReturn Vector(map(lambda x: x / value, self.rep))
EndProcedure
Procedure __abs__(self)
; "absolute gives the length"
ProcedureReturn Sqr(self % self)
EndProcedure
Procedure __neg__(self)
ProcedureReturn Vector(map(lambda x: -x, self.rep))
EndProcedure
Procedure __mod__(self, other)
; "dot product"
ProcedureReturn dot(self, other)
EndProcedure
Procedure __xor__(self, other)
; "3d cross product"
ProcedureReturn cross(self, other)
EndProcedure
; coord access functions
Procedure __len__(self)
ProcedureReturn Len(self.rep)
EndProcedure
Procedure __getitem__(self, index)
ProcedureReturn self.rep[index]
EndProcedure
Procedure __getattr__(self, name)
name_indices = {'x':0, 'y':1, 'z':2, 'w': 3, 'u': 0, 'v': 1}
If Not name_indices.has_key(name): raise AttributeError(name)
ProcedureReturn self.rep[name_indices[name]]
EndProcedure
; other useful basic functions
Procedure __eq__(self, other)
ProcedureReturn 0 Not in map(lambda a, b: a == b, self.rep, other.rep)
EndProcedure
Procedure __ne__(self, other)
ProcedureReturn 0 in map(lambda a, b: a == b, self.rep, other.rep)
EndProcedure
Procedure __nonzero__(self)
ProcedureReturn max(map(lambda x: Abs(x), self.rep)) > 0
EndProcedure
; string conversion functions
Procedure.s __str__(self)
s.s = ",".join(map(lambda x: "%.3f" % x, self.rep))
ProcedureReturn "(" + s + ")"
EndProcedure
Procedure.s __repr__(self)
s.s = ",".join(map(lambda x: "%.3f" % x, self.rep))
ProcedureReturn "Vector(" + s + ")"
EndProcedure
; other functions
Procedure dot(self, other)
temp = map(lambda x, y: x * y, self.rep, other.rep)
ProcedureReturn reduce(lambda a, b: a + b, temp)
EndProcedure
Procedure cross(self, other)
a1, a2, a3 = self
b1, b2, b3 = other
ProcedureReturn Vector(a2*b3 - a3*b2, a3*b1 - a1*b3, a1*b2 - a2*b1)
EndProcedure
Procedure normalize(self)
len = Abs(self)
If len < #E-5 : ProcedureReturn 0 : EndIf
self.rep = tuple(map(lambda x: x / len, self.rep))
EndProcedure
Procedure unit(self)
len = Abs(self)
If len < #E-5 : ProcedureReturn 0 : EndIf
ProcedureReturn self / len
EndProcedure
; test
If __name__ == "__main__":
a = Vector(0,3,4)
b = Vector(1,2,5)
print a, b
print a + b
print Abs(a)
print a + Vector(1,0,0)
print a ^ b
x, y, z = a
print x, y, z
Scarabol