33 inline void Normalize(
XVector &r );
56 friend class Quadsquare;
89 return XVector( s*i, s*j, s*k );
99 return XVector( i+obj.i, j+obj.j, k+obj.k );
103 return XVector( i-obj.i, j-obj.j, k-obj.k );
107 ::Normalize( *
this );
116 return i == b.i &&
j == b.j &&
k == b.k;
120 return XVector( this->j*v.k-this->k*v.j,
121 this->k*v.i-this->i*v.k,
122 this->i*v.j-this->j*v.i );
126 return i*b.i+
j*b.j+
k*b.k;
134 return XSQRT( i*i+j*j+k*k );
136 inline QFLOAT MagnitudeSquared()
const
142 return XVector( i >= 0 ? i : -i,
150 return XVector( (i < other.i) ? i : other.i,
151 (j < other.j) ? j : other.j,
152 (k < other.k) ? k : other.k );
156 return XVector( (i > other.i) ? i : other.i,
157 (j > other.j) ? j : other.j,
158 (k > other.k) ? k : other.k );
165 XVector retval( lval.i/obj, lval.j/obj, lval.k/obj );
187 lval.j *= obj, lval.k *= obj;
191 inline void Normalize(
XVector &r )
194 if (size > 0.00000000001) {
204 return a.i*b.i+a.j*b.j+a.k*b.k;
209 XVector retval( lval.i*obj, lval.j*obj, lval.k*obj );
214 XVector retval( lval.i*obj, lval.j*obj, lval.k*obj );
220 return XVector( rval.i*obj, rval.j*obj, rval.k*obj );
225 return XVector( rval.i*obj, rval.j*obj, rval.k*obj );
229 XVector retval( lval.i*obj, lval.j*obj, lval.k*obj );
235 return XVector( rval.i*obj, rval.j*obj, rval.k*obj );
240 return (a.MagnitudeSquared() < (delta * delta));
245 r.i = a.j*b.k-a.k*b.j;
246 r.j = a.k*b.i-a.i*b.k;
247 r.k = a.i*b.j-a.j*b.i;
249 if (size < 0.00001) {
261 ScaledCrossProduct( v2-v1, v3-v1, temp );
267 return XVector( p.i*v.i+q.i*v.j+r.i*v.k,
268 p.j*v.i+q.j*v.j+r.j*v.k,
269 p.k*v.i+q.k*v.j+r.k*v.k );
274 result.i = v1.j*v2.k-v1.k*v2.j;
275 result.j = v1.k*v2.i-v1.i*v2.k;
276 result.k = v1.i*v2.j-v1.j*v2.i;