Habe hier mal eine kleine "Helperklasse" (weiß nicht, wie man es unter BB nennen würde, da es ja eigentlich keine Klassen gibt) geschrieben, die einem die ganze Arbeit mit dreidimensionalen Vektoren abnimmt.
Weiß nicht, ob es sowas schon gibt, ist ja nicht sonderlich schwer zu implementieren, macht aber die Arbeit doch deutlich einfacher, wenn man was mit den Dingern zutun hat.
BlitzBasic: [AUSKLAPPEN] [EINKLAPPEN] Type TVec3 Field x# Field y# Field z# End Type
Local P1.TVec3 = CreateVec3(1,2,3) Local P2.TVec3 = CreateVec3(4,5,6)
Delay 3000
Function CreateVec3.TVec3(x#,y#,z#) out.TVec3 = New TVec3 out\x = x out\y = y out\z = z Return out End Function
Function Vec3ToString$(a.TVec3) Return "( "+a\x+" | "+a\y+" | "+a\z+" )" End Function
Function Vec3Add.TVec3(a.TVec3, b.TVec3) out.TVec3 = New TVec3 out\x = a\x+b\x out\y = a\y+b\y out\z = a\z+b\z Return out End Function
Function Vec3AddLocal.TVec3(a.TVec3, b.TVec3) a\x = a\x+b\x a\y = a\y+b\y a\z = a\z+b\z Return a End Function
Function Vec3Sub.TVec3(a.TVec3, b.TVec3) out.TVec3 = New TVec3 out\x = a\x-b\x out\y = a\y-b\y out\z = a\z-b\z Return out End Function
Function Vec3SubLocal.TVec3(a.TVec3, b.TVec3) a\x = a\x-b\x a\y = a\y-b\y a\z = a\z-b\z Return a End Function
Function Vec3MulElem.TVec3(a.TVec3, b.TVec3) out.TVec3 = New TVec3 out\x = a\x*b\x out\y = a\y*b\y out\z = a\z*b\z Return out End Function
Function Vec3MulElemLocal.TVec3(a.TVec3, b.TVec3) a\x = a\x*b\x a\y = a\y*b\y a\z = a\z*b\z Return a End Function
Function Vec3Mul.TVec3(a.TVec3, s#) out.TVec3 = New TVec3 out\x = a\x*s out\y = a\y*s out\z = a\z*s Return out End Function
Function Vec3MulLocal.TVec3(a.TVec3, s#) a\x = a\x*s a\y = a\y*s a\z = a\z*s Return a End Function
Function Vec3DivElem.TVec3(a.TVec3, b.TVec3) out.TVec3 = New TVec3 out\x = a\x/b\x out\y = a\y/b\y out\z = a\z/b\z Return out End Function
Function Vec3DivElemLocal.TVec3(a.TVec3, b.TVec3) a\x = a\x/b\x a\y = a\y/b\y a\z = a\z/b\z Return a End Function
Function Vec3Div.TVec3(a.TVec3, s#) out.TVec3 = New TVec3 out\x = a\x/s out\y = a\y/s out\z = a\z/s Return out End Function
Function Vec3DivLocal.TVec3(a.TVec3, s#) a\x = a\x/s a\y = a\y/s a\z = a\z/s Return a End Function
Function Vec3DotProduct#(a.TVec3, b.TVec3) Return a\x*b\x + a\y*b\y + a\z*b\z End Function
Function Vec3Normalize.TVec3(a.TVec3) length# = Sqr(a\x*a\x+a\y*a\y+a\z*a\z) out.TVec3 = New TVec3 out\x = a\x/length out\y = a\y/length out\z = a\z/length Return out End Function
Function Vec3NormalizeLocal.TVec3(a.TVec3) length# = Sqr(a\x*a\x+a\y*a\y+a\z*a\z) a\x = a\x/length a\y = a\y/length a\z = a\z/length Return out End Function
Function Vec3Length#(a.TVec3) Return Sqr(a\x*a\x+a\y*a\y+a\z*a\z) End Function
Function Vec3CrossProduct.TVec3(a.TVec3, b.TVec3) out.TVec3 = New TVec3 out\x = a\y*b\z-a\z*b\y out\y = a\z*b\x-a\x*b\z out\z = a\x*b\y-a\y*b\x Return out End Function
Function Vec3CrossProductLocal.TVec3(a.TVec3, b.TVec3) x# = a\y*b\z-a\z*b\y y# = a\z*b\x-a\x*b\z z# = a\x*b\y-a\y*b\x a\x = x a\y = y a\z = z Return a End Function
Function Vec3Angle#(a.TVec3, b.TVec3) length# = Sqr(a\x*a\x+a\y*a\y+a\z*a\z) dot# = a\x*b\x + a\y*b\y + a\z*b\z Return ACos(dot#/length#) End Function
Ist eigentlich auch ganz gut ausdokumentiert, sagt aber bitte bescheid, wenn irgendwas unklar ist.
Viel Spaß damit!
Edit: Multiplikation und Division mit einem Skalar hinzugefügt.
|