22VectorAcc
operator + (
const VectorAcc& r1,
const VectorAcc& r2) {
23 return VectorAcc(r1.p+r2.p,r1.v+r2.v,r1.dv+r2.dv);
26VectorAcc
operator - (
const VectorAcc& r1,
const VectorAcc& r2) {
27 return VectorAcc(r1.p-r2.p, r1.v-r2.v, r1.dv-r2.dv);
29VectorAcc
operator + (
const Vector& r1,
const VectorAcc& r2) {
30 return VectorAcc(r1+r2.p,r2.v,r2.dv);
33VectorAcc
operator - (
const Vector& r1,
const VectorAcc& r2) {
34 return VectorAcc(r1-r2.p, -r2.v, -r2.dv);
36VectorAcc
operator + (
const VectorAcc& r1,
const Vector& r2) {
37 return VectorAcc(r1.p+r2,r1.v,r1.dv);
40VectorAcc
operator - (
const VectorAcc& r1,
const Vector& r2) {
41 return VectorAcc(r1.p-r2, r1.v, r1.dv);
46 return VectorAcc(-r.p,-r.v,-r.dv);
50VectorAcc
operator * (
const VectorAcc& r1,
const VectorAcc& r2) {
51 return VectorAcc(r1.p*r2.p,
53 r1.dv*r2.p+2*r1.v*r2.v+r1.p*r2.dv
57VectorAcc
operator * (
const VectorAcc& r1,
const Vector& r2) {
58 return VectorAcc(r1.p*r2, r1.v*r2, r1.dv*r2 );
61VectorAcc
operator * (
const Vector& r1,
const VectorAcc& r2) {
62 return VectorAcc(r1*r2.p, r1*r2.v, r1*r2.dv );
69 return VectorAcc(r1*r2.p, r1*r2.v, r1*r2.dv );
73 return VectorAcc(r1.p*r2, r1.v*r2, r1.dv*r2 );
76VectorAcc
operator * (
const doubleAcc& r1,
const VectorAcc& r2) {
77 return VectorAcc(r1.t*r2.p,
78 r1.t*r2.v + r1.d*r2.p,
79 r1.t*r2.dv + 2*r1.d*r2.v + r1.dd*r2.p
83VectorAcc
operator * (
const VectorAcc& r2,
const doubleAcc& r1) {
84 return VectorAcc(r1.t*r2.p,
85 r1.t*r2.v + r1.d*r2.p,
86 r1.t*r2.dv + 2*r1.d*r2.v + r1.dd*r2.p
118 return VectorAcc(Vector::Zero(),Vector::Zero(),Vector::Zero());
121void VectorAcc::ReverseSign() {
135doubleAcc
dot(
const VectorAcc& lhs,
const VectorAcc&
rhs) {
136 return doubleAcc(
dot(lhs.p,
rhs.p),
142doubleAcc
dot(
const VectorAcc& lhs,
const Vector&
rhs) {
143 return doubleAcc(
dot(lhs.p,
rhs),
149doubleAcc
dot(
const Vector& lhs,
const VectorAcc&
rhs) {
150 return doubleAcc(
dot(lhs,
rhs.p),
157bool Equal(
const VectorAcc& r1,
const VectorAcc& r2,
double eps) {
164bool Equal(
const Vector& r1,
const VectorAcc& r2,
double eps) {
171bool Equal(
const VectorAcc& r1,
const Vector& r2,
double eps) {
182VectorAcc
operator / (
const VectorAcc& r2,
const doubleAcc& r1) {
190RotationAcc
operator* (
const RotationAcc& r1,
const RotationAcc& r2) {
191 return RotationAcc( r1.R * r2.R,
193 r1.dw + r1.w*(r1.R*r2.w) + r1.R*r2.dw
197RotationAcc
operator* (
const Rotation& r1,
const RotationAcc& r2) {
198 return RotationAcc( r1*r2.R, r1*r2.w, r1*r2.dw);
201RotationAcc
operator* (
const RotationAcc& r1,
const Rotation& r2) {
202 return RotationAcc( r1.R*r2, r1.w, r1.dw );
219 return RotationAcc(Rotation::Identity(),Vector::Zero(),Vector::Zero());
228 tmp.
p =
R.Inverse(arg.
p);
229 tmp.
v =
R.Inverse(arg.
v -
w * arg.
p);
230 tmp.
dv =
R.Inverse(arg.
dv - dw*arg.
p -
w*(arg.
v+
R*tmp.
v));
236 tmp.
p =
R.Inverse(arg);
237 tmp.
v =
R.Inverse(-
w*arg);
238 tmp.
dv =
R.Inverse(-dw*arg -
w*(
R*tmp.
v));
247 tmp.
v =
w*tmp.
p + tmp.
dv;
248 tmp.
dv = dw*tmp.
p +
w*(tmp.
v + tmp.
dv) +
R*arg.
dv;
253 return VectorAcc(
R*x.p,
R*x.v,
R*x.dv);
260 tmp.
dv = dw*tmp.
p +
w*tmp.
v;
321bool Equal(
const RotationAcc& r1,
const RotationAcc& r2,
double eps) {
324bool Equal(
const Rotation& r1,
const RotationAcc& r2,
double eps) {
328bool Equal(
const RotationAcc& r1,
const Rotation& r2,
double eps) {
343 return FrameAcc(RotationAcc::Identity(),VectorAcc::Zero());
349 return FrameAcc(lhs.M*
rhs.M,lhs.M*
rhs.p+lhs.p);
353 return FrameAcc(lhs.M*
rhs.M,lhs.M*
rhs.p+lhs.p);
357 return FrameAcc(lhs.M*
rhs.M,lhs.M*
rhs.p+lhs.p);
371 return M.Inverse(arg-p);
376 return M.Inverse(arg-p);
391bool Equal(
const FrameAcc& r1,
const FrameAcc& r2,
double eps) {
412Twist FrameAcc::GetAccTwist()
const {
434 return TwistAcc(VectorAcc::Zero(),VectorAcc::Zero());
438void TwistAcc::ReverseSign()
471 return TwistAcc(lhs.vel*
rhs,lhs.rot*
rhs);
476 return TwistAcc(lhs*
rhs.vel,lhs*
rhs.rot);
481 return TwistAcc(lhs.vel/
rhs,lhs.rot/
rhs);
487 return TwistAcc(lhs.vel*
rhs,lhs.rot*
rhs);
492 return TwistAcc(lhs*
rhs.vel,lhs*
rhs.rot);
497 return TwistAcc(lhs.vel/
rhs,lhs.rot/
rhs);
505 return TwistAcc(lhs.vel+
rhs.vel,lhs.rot+
rhs.rot);
510 return TwistAcc(lhs.vel-
rhs.vel,lhs.rot-
rhs.rot);
516 return TwistAcc(-arg.vel,-arg.rot);
580Twist TwistAcc::GetTwistDot()
const {
584bool Equal(
const TwistAcc& a,
const TwistAcc&
b,
double eps) {
588bool Equal(
const Twist& a,
const TwistAcc&
b,
double eps) {
592bool Equal(
const TwistAcc& a,
const Twist&
b,
double eps) {
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
RotationAcc M
Rotation,angular velocity, and angular acceleration of frame.
VectorAcc p
Translation, velocity and acceleration of origin.
represents a frame transformation in 3D space (rotation + translation)
Rotation M
Orientation of the Frame.
Vector p
origine of the Frame
Vector dw
angular acceration vector
Vector w
angular velocity vector
Rotation R
rotation matrix
represents rotations in 3 dimensional space.
VectorAcc rot
rotational velocity and its 1st and 2nd derivative
VectorAcc vel
translational velocity and its 1st and 2nd derivative
represents both translational and rotational velocities.
Vector rot
The rotational velocity of that point.
Vector vel
The velocity of that point.
Vector dv
acceleration vector
A concrete implementation of a 3 dimensional vector class.
local_group_size(16, 16) .push_constant(Type b
local_group_size(16, 16) .push_constant(Type rhs
bool Equal(const VectorAcc &r1, const VectorAcc &r2, double eps)
VectorAcc operator*(const VectorAcc &r1, const VectorAcc &r2)
VectorAcc operator-(const VectorAcc &r1, const VectorAcc &r2)
VectorAcc operator/(const VectorAcc &r1, double r2)
doubleAcc dot(const VectorAcc &lhs, const VectorAcc &rhs)
VectorAcc operator+(const VectorAcc &r1, const VectorAcc &r2)