Jump to content

Vector products: Difference between revisions

no edit summary
(Added Arturo implementation)
No edit summary
Line 4,961:
a . b x c = 6
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>
 
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.