129#define Point2fT Tuple2fT
131#define Quat4fT Tuple4fT
133#define Vector3fT Tuple3fT
137# define Epsilon 1.0e-5
149 return (
Vector3fT){.X = v1.Y * v2.Z - v1.Z * v2.Y,
150 .Y = v1.Z * v2.X - v1.X * v2.Z,
151 .Z = v1.X * v2.Y - v1.Y * v2.X};
160 return NewObj.X * v1.X + NewObj.Y * v1.Y + NewObj.Z * v1.Z;
168static double Vector3fLengthSquared(
Vector3fT NewObj) {
169 return NewObj.X * NewObj.X + NewObj.Y * NewObj.Y + NewObj.Z * NewObj.Z;
177static double Vector3fLength(
Vector3fT NewObj) {
178 return sqrt(Vector3fLengthSquared(NewObj));
196 n = q1.X * q1.X + q1.Y * q1.Y + q1.Z * q1.Z + q1.W * q1.W;
197 s = (n > 0) ? (2.0 / n) : 0;
212 NewObj.
s.
XX = 1.0 - (yy + zz);
213 NewObj.
s.
YX = xy - wz;
214 NewObj.
s.
ZX = xz + wy;
215 NewObj.
s.
XY = xy + wz;
216 NewObj.
s.
YY = 1.0 - (xx + zz);
217 NewObj.
s.
ZY = yz - wx;
218 NewObj.
s.
XZ = xz - wy;
219 NewObj.
s.
YZ = yz + wx;
220 NewObj.
s.
ZZ = 1.0 - (xx + yy);
280 s = sqrt((NewObj->
XX * NewObj->
XX +
281 NewObj->
XY * NewObj->
XY +
282 NewObj->
XZ * NewObj->
XZ +
283 NewObj->
YX * NewObj->
YX +
284 NewObj->
YY * NewObj->
YY +
285 NewObj->
YZ * NewObj->
YZ +
286 NewObj->
ZX * NewObj->
ZX +
287 NewObj->
ZY * NewObj->
ZY +
288 NewObj->
ZZ * NewObj->
ZZ) / 3.0);
292 rot3->
s.
XX = NewObj->
XX;
293 rot3->
s.
XY = NewObj->
XY;
294 rot3->
s.
XZ = NewObj->
XZ;
295 rot3->
s.
YX = NewObj->
YX;
296 rot3->
s.
YY = NewObj->
YY;
297 rot3->
s.
YZ = NewObj->
YZ;
298 rot3->
s.
ZX = NewObj->
ZX;
299 rot3->
s.
ZY = NewObj->
ZY;
300 rot3->
s.
ZZ = NewObj->
ZZ;
304 n = 1.0 / sqrt(NewObj->
XX * NewObj->
XX +
305 NewObj->
XY * NewObj->
XY +
306 NewObj->
XZ * NewObj->
XZ);
311 n = 1.0 / sqrt(NewObj->
YX * NewObj->
YX +
312 NewObj->
YY * NewObj->
YY +
313 NewObj->
YZ * NewObj->
YZ);
318 n = 1.0 / sqrt(NewObj->
ZX * NewObj->
ZX +
319 NewObj->
ZY * NewObj->
ZY +
320 NewObj->
ZZ * NewObj->
ZZ);
331 n = 1.0 / sqrt(NewObj->
XX * NewObj->
XX +
332 NewObj->
XY * NewObj->
XY +
333 NewObj->
XZ * NewObj->
XZ);
338 n = 1.0 / sqrt(NewObj->
YX * NewObj->
YX +
339 NewObj->
YY * NewObj->
YY +
340 NewObj->
YZ * NewObj->
YZ);
345 n = 1.0 / sqrt(NewObj->
ZX * NewObj->
ZX +
346 NewObj->
ZY * NewObj->
ZY +
347 NewObj->
ZZ * NewObj->
ZZ);
357static void Matrix4fSetRotationScaleFromMatrix3f(
Matrix4fT * NewObj,
360 assert(NewObj && m1);
362 NewObj->
XX = m1->
s.
XX;
363 NewObj->
YX = m1->
s.
YX;
364 NewObj->
ZX = m1->
s.
ZX;
365 NewObj->
XY = m1->
s.
XY;
366 NewObj->
YY = m1->
s.
YY;
367 NewObj->
ZY = m1->
s.
ZY;
368 NewObj->
XZ = m1->
s.
XZ;
369 NewObj->
YZ = m1->
s.
YZ;
370 NewObj->
ZZ = m1->
s.
ZZ;
374static void Matrix4fMulRotationScale(
Matrix4fT *NewObj,
double scale) {
399static void Matrix4fSetRotationFromMatrix3f(
Matrix4fT * NewObj,
404 assert(NewObj && m1);
408 Matrix4fSetRotationScaleFromMatrix3f(NewObj, m1);
409 Matrix4fMulRotationScale(NewObj,
scale);
ArcBall_t init_arcBall(double NewWidth, double NewHeight)
#define X(prefix, name, str, type, subtype,...)
static WUR pointf scale(double c, pointf p)