// Vec3D - simple 3D vector class
// processing.unlekker.net
class Vec3D {
float x,y,z;
Vec3D(float _x,float _y,float _z) {
x=_x;
y=_y;
z=_z;
}
Vec3D(Vec3D v) {
x=v.x;
y=v.y;
z=v.z;
}
void set(float _x,float _y,float _z) {
x=_x;
y=_y;
z=_z;
}
void set(Vec3D v) {
x=v.x;
y=v.y;
z=v.z;
}
void add(float _x,float _y,float _z) {
x+=_x;
y+=_y;
z+=_z;
}
void add(Vec3D v) {
x+=v.x;
y+=v.y;
z+=v.z;
}
void sub(float _x,float _y,float _z) {
x-=_x;
y-=_y;
z-=_z;
}
void sub(Vec3D v) {
x-=v.x;
y-=v.y;
z-=v.z;
}
void mult(float m) {
x*=m;
y*=m;
z*=m;
}
void div(float m) {
x/=m;
y/=m;
z/=m;
}
float length() {
return sqrt(x*x+y*y+z*z);
}
void normalise() {
float l=length();
if(l!=0) {
x/=l;
y/=l;
z/=l;
}
}
void rotateX(float val) {
// Floats are not precise enough, so doubles are used for the calculations
double cosval=Math.cos(val);
double sinval=Math.sin(val);
double tmp1=y*cosval - z*sinval;
double tmp2=y*sinval + z*cosval;
y=(float)tmp1;
z=(float)tmp2;
}
void rotateY(float val) {
// Floats are not precise enough, so doubles are used for the calculations
double cosval=Math.cos(val);
double sinval=Math.sin(val);
double tmp1=x*cosval - z*sinval;
double tmp2=x*sinval + z*cosval;
x=(float)tmp1;
z=(float)tmp2;
}
void rotateZ(float val) {
// Floats are not precise enough, so doubles are used for the calculations
double cosval=Math.cos(val);
double sinval=Math.sin(val);
double tmp1=x*cosval - y*sinval;
double tmp2=x*sinval + y*cosval;
x=(float)tmp1;
y=(float)tmp2;
}
}
|