Vector products: Difference between revisions
Content added Content deleted
Drkameleon (talk | contribs) (Added Arturo implementation) |
No edit summary |
||
Line 4,961: | Line 4,961: | ||
a . b x c = 6 |
a . b x c = 6 |
||
a x b x c = [-267, 204, -3] |
a x b x c = [-267, 204, -3] |
||
</pre> |
|||
=={{header|XBS}}== |
|||
<lang XBS>#> Vector3 Class <# |
|||
class Vector3 { |
|||
construct=func(self,x,y,z){ |
|||
self:x=x; |
|||
self:y=y; |
|||
self:z=z; |
|||
}; |
|||
ToString=func(self){ |
|||
send self.x+", "+self.y+", "+self.z; |
|||
}; |
|||
Magnitude=func(self){ |
|||
send math.sqrt((self.x^2)+(self.y^2)+(self.z^2)); |
|||
}; |
|||
Normalize=func(self){ |
|||
set Mag = self::Magnitude(); |
|||
send new Vector3 with [self.x/Mag,self.y/Mag,self.z/Mag]; |
|||
}; |
|||
Dot=func(self,v2){ |
|||
send (self.x*v2.x)+(self.y*v2.y)+(self.z*v2.z); |
|||
}; |
|||
__add=func(self,x){ |
|||
if (type(x)=="object"){ |
|||
send new Vector3 with [self.x+x.x,self.y+x.y,self.z+x.z]; |
|||
} else { |
|||
send new Vector3 with [self.x+x,self.y+x,self.z+x]; |
|||
} |
|||
}; |
|||
__sub=func(self,x){ |
|||
if (type(x)=="object"){ |
|||
send new Vector3 with [self.x-x.x,self.y-x.y,self.z-x.z]; |
|||
} else { |
|||
send new Vector3 with [self.x-x,self.y-x,self.z-x]; |
|||
} |
|||
}; |
|||
__mul=func(self,x){ |
|||
if (type(x)=="object"){ |
|||
send new Vector3 with [self.x*x.x,self.y*x.y,self.z*x.z]; |
|||
} else { |
|||
send new Vector3 with [self.x*x,self.y*x,self.z*x]; |
|||
} |
|||
}; |
|||
__div=func(self,x){ |
|||
if (type(x)=="object"){ |
|||
send new Vector3 with [self.x/x.x,self.y/x.y,self.z/x.z]; |
|||
} else { |
|||
send new Vector3 with [self.x/x,self.y/x,self.z/x]; |
|||
} |
|||
}; |
|||
__pow=func(self,x){ |
|||
if (type(x)=="object"){ |
|||
send new Vector3 with [self.x^x.x,self.y^x.y,self.z^x.z]; |
|||
} else { |
|||
send new Vector3 with [self.x^x,self.y^x,self.z^x]; |
|||
} |
|||
}; |
|||
__mod=func(self,x){ |
|||
if (type(x)=="object"){ |
|||
send new Vector3 with [self.x%x.x,self.y%x.y,self.z%x.z]; |
|||
} else { |
|||
send new Vector3 with [self.x%x,self.y%x,self.z%x]; |
|||
} |
|||
}; |
|||
Reflect=func(self,v2){ |
|||
set Normal = self::Normalize(); |
|||
set Direction = v2::Normalize(); |
|||
send (Normal*(2*Normal::Dot(Direction)))-Direction; |
|||
}; |
|||
Cross=func(self,v2){ |
|||
send new Vector3 with [(self.y*v2.z)-(self.z*v2.y),(self.z*v2.x)-(self.x*v2.z),(self.x*v2.y)-(self.y*v2.x)]; |
|||
}; |
|||
} |
|||
math:deg=func(x){ |
|||
send x*(180/math.PI); |
|||
} |
|||
math:rad=func(x){ |
|||
send x*(math.PI/180); |
|||
} |
|||
set a = new Vector3 with [3,4,5]; |
|||
set b = new Vector3 with [4,3,5]; |
|||
set c = new Vector3 with [-5,-12,-13]; |
|||
log("Dot: ",a::Dot(b)); |
|||
log("Cross: ",a::Cross(b)::ToString()); |
|||
log("Scalar Triple: ",a::Dot(b::Cross(c))); |
|||
log("Vector Triple: ",a::Cross(b::Cross(c))::ToString());</lang> |
|||
{{out}} |
|||
<pre> |
|||
Dot: 49 |
|||
Cross: 5, 5, -7 |
|||
Scalar Triple: 6 |
|||
Vector Triple: -267, 204, -3 |
|||
</pre> |
</pre> |
||