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);
30 return VectorAcc(r1+r2.p,r2.v,r2.dv);
34 return VectorAcc(r1-r2.p, -r2.v, -r2.dv);
37 return VectorAcc(r1.p+r2,r1.v,r1.dv);
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
58 return VectorAcc(r1.p*r2, r1.v*r2, r1.dv*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
90VectorAcc& VectorAcc::operator = (
const VectorAcc& arg) {
97VectorAcc& VectorAcc::operator = (
const Vector& arg) {
104VectorAcc& VectorAcc::operator += (
const VectorAcc& arg) {
110VectorAcc& VectorAcc::operator -= (
const VectorAcc& arg) {
117VectorAcc VectorAcc::Zero() {
118 return VectorAcc(Vector::Zero(),Vector::Zero(),Vector::Zero());
121void VectorAcc::ReverseSign() {
130 res.d =
dot(p,
v)/res.t;
131 res.dd = (
dot(p,dv)+
dot(
v,
v)-res.d*res.d)/res.t;
135doubleAcc
dot(
const VectorAcc& lhs,
const VectorAcc&
rhs) {
136 return doubleAcc(
dot(lhs.p,
rhs.p),
143 return doubleAcc(
dot(lhs.p,
rhs),
150 return doubleAcc(
dot(lhs,
rhs.p),
157bool Equal(
const VectorAcc& r1,
const VectorAcc& 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 );
205RotationAcc& RotationAcc::operator = (
const RotationAcc& arg) {
211RotationAcc& RotationAcc::operator = (
const Rotation& arg) {
218RotationAcc RotationAcc::Identity() {
219 return RotationAcc(Rotation::Identity(),Vector::Zero(),Vector::Zero());
222RotationAcc RotationAcc::Inverse()
const {
223 return RotationAcc(
R.Inverse(),-
R.Inverse(
w),-
R.Inverse(dw));
226VectorAcc RotationAcc::Inverse(
const VectorAcc& arg)
const {
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));
234VectorAcc RotationAcc::Inverse(
const Vector& arg)
const {
236 tmp.p =
R.Inverse(arg);
237 tmp.v =
R.Inverse(-
w*arg);
238 tmp.dv =
R.Inverse(-dw*arg -
w*(
R*tmp.v));
243VectorAcc RotationAcc::operator*(
const VectorAcc& arg)
const {
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);
256VectorAcc RotationAcc::operator*(
const Vector& arg)
const {
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) {
336FrameAcc& FrameAcc::operator = (
const FrameAcc& arg) {
342FrameAcc FrameAcc::Identity() {
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);
360VectorAcc FrameAcc::operator *(
const VectorAcc & arg)
const
364VectorAcc FrameAcc::operator *(
const Vector & arg)
const
369VectorAcc FrameAcc::Inverse(
const VectorAcc& arg)
const
371 return M.Inverse(arg-p);
374VectorAcc FrameAcc::Inverse(
const Vector& arg)
const
376 return M.Inverse(arg-p);
379FrameAcc FrameAcc::Inverse()
const
381 return FrameAcc(
M.Inverse(),-
M.Inverse(p));
384FrameAcc& FrameAcc::operator =(
const Frame & arg)
391bool Equal(
const FrameAcc& r1,
const FrameAcc& r2,
double eps) {
402Frame FrameAcc::GetFrame()
const {
407Twist FrameAcc::GetTwist()
const {
408 return Twist(p.v,
M.w);
412Twist FrameAcc::GetAccTwist()
const {
413 return Twist(p.dv,
M.dw);
432TwistAcc TwistAcc::Zero()
434 return TwistAcc(VectorAcc::Zero(),VectorAcc::Zero());
438void TwistAcc::ReverseSign()
444TwistAcc TwistAcc::RefPoint(
const VectorAcc& v_base_AB)
451 return TwistAcc(this->vel+this->
rot*v_base_AB,this->
rot);
454TwistAcc& TwistAcc::operator-=(
const TwistAcc& arg)
461TwistAcc& TwistAcc::operator+=(
const TwistAcc& arg)
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);
523TwistAcc RotationAcc::Inverse(
const TwistAcc& arg)
const
525 return TwistAcc(Inverse(arg.vel),Inverse(arg.rot));
528TwistAcc RotationAcc::operator * (
const TwistAcc& arg)
const
530 return TwistAcc((*
this)*arg.vel,(*
this)*arg.rot);
533TwistAcc RotationAcc::Inverse(
const Twist& arg)
const
535 return TwistAcc(Inverse(arg.vel),Inverse(arg.rot));
538TwistAcc RotationAcc::operator * (
const Twist& arg)
const
540 return TwistAcc((*
this)*arg.vel,(*
this)*arg.rot);
544TwistAcc FrameAcc::operator * (
const TwistAcc& arg)
const
548 tmp.vel =
M*arg.vel+p*tmp.rot;
552TwistAcc FrameAcc::operator * (
const Twist& arg)
const
556 tmp.vel =
M*arg.vel+p*tmp.rot;
560TwistAcc FrameAcc::Inverse(
const TwistAcc& arg)
const
563 tmp.rot =
M.Inverse(arg.rot);
564 tmp.vel =
M.Inverse(arg.vel-p*arg.rot);
568TwistAcc FrameAcc::Inverse(
const Twist& arg)
const
571 tmp.rot =
M.Inverse(arg.rot);
572 tmp.vel =
M.Inverse(arg.vel-p*arg.rot);
576Twist TwistAcc::GetTwist()
const {
577 return Twist(vel.p,
rot.p);
580Twist TwistAcc::GetTwistDot()
const {
581 return Twist(vel.v,
rot.v);
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.
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
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)
Rall2d< double, double, double > doubleAcc