TORCS  1.3.10
The Open Racing Car Simulator
Loading...
Searching...
No Matches
Transform.cpp
Go to the documentation of this file.
1/*
2 SOLID - Software Library for Interference Detection
3 Copyright (C) 1997-1998 Gino van den Bergen
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public
16 License along with this library; if not, write to the Free
17 Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 Please send remarks, questions and bug reports to gino@win.tue.nl,
20 or write to:
21 Gino van den Bergen
22 Department of Mathematics and Computing Science
23 Eindhoven University of Technology
24 P.O. Box 513, 5600 MB Eindhoven, The Netherlands
25*/
26
27#ifdef _MSC_VER
28#pragma warning(disable:4786) // identifier was truncated to '255'
29#endif // _MSC_VER
30
31#include "Transform.h"
32
33void Transform::setValue(const float m[16]) {
34 basis.setValue(m);
35 origin.setValue(&m[12]);
36 type = AFFINE;
37}
38
39void Transform::setValue(const double m[16]) {
40 basis.setValue(m);
41 origin.setValue(&m[12]);
42 type = AFFINE;
43}
44
46 origin += basis * t.origin;
47 basis *= t.basis;
48 type |= t.type;
49 return *this;
50}
51
53 origin += basis * v;
55}
56
58 basis *= Matrix(q);
59 type |= ROTATION;
60}
61
63 basis *= Matrix(x, y, z);
64 type |= SCALING;
65}
66
68 basis.setIdentity();
69 origin.setValue(0, 0, 0);
70 type = IDENTITY;
71}
72
75 origin.setValue(-dot(basis[X], t.origin),
76 -dot(basis[Y], t.origin),
77 -dot(basis[Z], t.origin));
78 type = t.type;
79}
80
81void Transform::mult(const Transform& t1, const Transform& t2) {
82 basis = t1.basis * t2.basis;
83 origin = t1(t2.origin);
84 type = t1.type | t2.type;
85}
86
88 Vector v = t2.origin - t1.origin;
89 if (t1.type & SCALING) {
90 Matrix inv = inverse(t1.basis);
91 basis = inv * t2.basis;
92 origin = inv * v;
93 }
94 else {
96 origin = v * t1.basis;
97 }
98 type = t1.type | t2.type;
99}
@ Y
Definition Basic.h:58
@ X
Definition Basic.h:58
@ Z
Definition Basic.h:58
#define Scalar
Definition Basic.h:34
static Point q[4]
Definition Convex.cpp:55
static Vector y[4]
Definition Convex.cpp:56
Matrix multTransposeLeft(const Matrix &m1, const Matrix &m2)
Definition Matrix.h:206
Matrix transpose(const Matrix &m)
Definition Matrix.h:221
Matrix inverse(const Matrix &m)
Definition Matrix.h:223
Scalar dot(const Quaternion &q1, const Quaternion &q2)
Definition Quaternion.h:163
unsigned int type
Definition Transform.h:83
Matrix basis
Definition Transform.h:81
Transform & operator*=(const Transform &t)
Definition Transform.cpp:45
void rotate(const Quaternion &q)
Definition Transform.cpp:57
void invert(const Transform &t)
Definition Transform.cpp:73
void mult(const Transform &t1, const Transform &t2)
Definition Transform.cpp:81
void translate(const Vector &v)
Definition Transform.cpp:52
void setIdentity()
Definition Transform.cpp:67
Point origin
Definition Transform.h:82
void multInverseLeft(const Transform &t1, const Transform &t2)
Definition Transform.cpp:87
void scale(Scalar x, Scalar y, Scalar z)
Definition Transform.cpp:62
void setValue(const float m[16])
Definition Transform.cpp:33
@ TRANSLATION
Definition Transform.h:74