33 #include <dime/Basic.h>
43 dimeVec2f(dxfdouble _x, dxfdouble _y) {x = _x; y = _y;}
44 void setValue(
const dxfdouble _x,
const dxfdouble _y) {x = _x; y = _y;}
50 void print()
const { printf(
"Coord2: (%.3f, %.3f)\n", x,y);}
51 void print(
const char *s) {printf(
"%s: (%.3f, %.3f)\n", s,x,y);}
62 dimeVec3f(
const dxfdouble X,
const dxfdouble Y,
const dxfdouble Z)
65 { x = xyz[0]; y = xyz[1]; z = xyz[2]; }
67 { x=v.x; y=v.y; z=v.z; };
69 {
return dimeVec3f(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x); }
71 {
return x*v.x+y*v.y+z*v.z; }
74 {
return (x == v.x && y == v.y && z == v.z); }
75 bool equals(
const dimeVec3f &v, dxfdouble tol)
76 {
return (fabs(x-v.x) <= tol && fabs(y-v.y) <= tol && fabs(z-v.z) <= tol); }
78 operator dxfdouble *() {
return &x; }
79 const dxfdouble *getValue()
const {
return &x; }
80 void getValue(dxfdouble &_x, dxfdouble &_y, dxfdouble &_z)
const
81 { _x = x; _y = y; _z = z;}
82 dxfdouble length()
const
83 {
return (dxfdouble) sqrt(x*x+y*y+z*z); }
84 dxfdouble sqrLength(
void)
const
85 {
return x*x+y*y+z*z; }
87 { x = -x; y = -y; z = -z; }
88 void setValue(
const dxfdouble *v)
89 { x = v[0]; y = v[1]; z = v[2]; }
90 void setValue(
const dxfdouble X,
const dxfdouble Y,
const dxfdouble Z)
93 dxfdouble operator [] (
const int i)
const
94 {
return( (i==0)?x:((i==1)?y:z) ); };
95 dxfdouble & operator [] (
const int i)
96 {
return( (i==0)?x:((i==1)?y:z) ); };
98 dimeVec3f &operator *= (
const dxfdouble s)
99 { x*=s; y*=s; z*=s;
return *
this; }
100 dimeVec3f &operator /= (
const dxfdouble s)
101 { x/=s; y/=s; z/=s;
return *
this; }
103 { x+=v.x; y+=v.y; z+=v.z;
return *
this; }
105 { x-=v.x; y-=v.y; z-=v.z;
return *
this;}
109 {
return dimeVec3f(v.x*s, v.y*s, v.z*s); }
111 {
return dimeVec3f(v.x*s, v.y*s, v.z*s); }
113 {
return dimeVec3f(v.x/s, v.y/s, v.z/s); }
115 {
return dimeVec3f(v1.x+v2.x, v1.y+v2.y, v1.z+v2.z); }
117 {
return dimeVec3f(v1.x-v2.x, v1.y-v2.y, v1.z-v2.z); }
120 {
return (v1.x == v2.x && v1.y == v2.y && v1.z == v2.z); }
122 {
return (v1.x != v2.x || v1.y != v2.y || v1.z != v2.z); }
125 { x=v.x; y=v.y; z=v.z;
return *
this; }
127 void multMatrix(dxfdouble *matrix)
129 dxfdouble tx, ty, tz;
131 tx = matrix[0]*x+matrix[1]*y+matrix[2]*z;
132 ty = matrix[4]*x+matrix[5]*y+matrix[6]*z;
133 tz = matrix[8]*x+matrix[9]*y+matrix[10]*z;
134 x = tx, y = ty, z = tz;
138 { printf(
"dimeVec3f: (%.3f, %.3f, %.3f)\n",x, y, z); }
139 void print(
const char *s)
const
140 { printf(
"%s: (%.3f, %.3f, %.3f)\n",s, x, y, z); }
144 {
return dimeVec3f(x*v.x, y*v.y, z*v.z); }
157 dimeMatrix(dxfdouble a11, dxfdouble a12, dxfdouble a13, dxfdouble a14,
158 dxfdouble a21, dxfdouble a22, dxfdouble a23, dxfdouble a24,
159 dxfdouble a31, dxfdouble a32, dxfdouble a33, dxfdouble a34,
160 dxfdouble a41, dxfdouble a42, dxfdouble a43, dxfdouble a44);
163 bool isIdentity()
const;
164 void setTransform(
const dimeVec3f &translation,
176 void setRotation(
const dimeVec3f &u,
const dxfdouble angle);
179 void setScale(
const dxfdouble s);
191 void multMatrixVec(
dimeVec3f &vec)
const;
197 operator dxfdouble *() {
return &matrix[0][0]; }
200 dxfdouble *operator [](
int i) {
return &matrix[i][0]; }
201 const dxfdouble * operator [](
int i)
const {
return &matrix[i][0];}
212 dxfdouble determinant(
const int i=-2,
const int j=-1);
214 void operator *=(
const dxfdouble val);
217 dxfdouble matrix[4][4];
221 #endif // ! DIME_LINEAR_H