libalmath  1.14
 All Classes Namespaces Functions Variables Typedefs Groups Pages
altransform.h
1 /*
2  * Copyright (c) 2012 Aldebaran Robotics. All rights reserved.
3  * Use of this source code is governed by a BSD-style license that can be
4  * found in the COPYING file.
5  */
6 
7 
8 #pragma once
9 #ifndef _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
10 #define _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_
11 
12 #include <vector>
13 
14 namespace AL {
15  namespace Math {
22  struct Transform {
23 
25  float r1_c1, r1_c2, r1_c3, r1_c4;
26  float r2_c1, r2_c2, r2_c3, r2_c4;
27  float r3_c1, r3_c2, r3_c3, r3_c4;
30 
31 
32 
47 
48  Transform();
49 
56 
71  explicit Transform(const std::vector<float>& pFloats);
72 
76 
91 
92 
93 
94 
95  Transform(
96  const float& pPosX,
97  const float& pPosY,
98  const float& pPosZ);
99 
104  Transform& operator*= (const Transform& pT2);
105 
110  Transform operator* (const Transform& pT2) const;
111 
116  bool operator==(const Transform& pT2) const;
117 
122  bool operator!=(const Transform& pT2) const;
123 
134  bool isNear(
135  const Transform& pT2,
136  const float& pEpsilon=0.0001f) const;
137 
150  bool isTransform(
151  const float& pEpsilon=0.0001f) const;
152 
161  float norm() const;
162 
166 
171 
172 
173 
174 
175  float determinant() const;
176 
180 
184 
185 
190 
191 
192 
193 
194 
195  Transform inverse() const;
196 
200 
206 
207 
208  static Transform fromRotX(const float pRotX);
209 
213 
221 
222 
223  static Transform fromRotY(const float pRotY);
224 
228 
236 
237 
238  static Transform fromRotZ(const float pRotZ);
239 
240 
250  static Transform from3DRotation(
251  const float& pWX,
252  const float& pWY,
253  const float& pWZ);
254 
255 
259 
267 
268 
269 
270 
271  static Transform fromPosition(
272  const float pX,
273  const float pY,
274  const float pZ);
275 
296  static Transform fromPosition(
297  const float& pX,
298  const float& pY,
299  const float& pZ,
300  const float& pWX,
301  const float& pWY,
302  const float& pWZ);
303 
312  Transform diff(const Transform& pT2) const;
313 
314 
325  float distanceSquared(const Transform& pT2) const;
326 
327 
338  float distance(const Transform& pT2) const;
339 
343 
350 
351  std::vector<float> toVector() const;
352 
353  }; // end struct
354 
363  const Transform& pT,
364  Transform& pTOut);
365 
376  float norm(const Transform& pT);
377 
378 
382 
389 
390 
391 
392 
393 
395  const Transform& pT,
396  std::vector<float>& pTOut);
397 
401 
409 
410 
411 
412 
413 
414 
415 
416  std::vector<float> transformToFloatVector(
417  const Transform& pT);
418 
419 
423 
427 
428 
429 
430 
431 
432 
433  float determinant(const Transform& pT);
434 
438 
442 
443 
444 
445 
446 
447 
448  float determinant(const std::vector<float>& pFloats);
449 
453 
458 
459 
464 
465 
466 
467 
468 
469  void transformInverse(
470  const Transform& pT,
471  Transform& pTOut);
472 
476 
481 
482 
487 
488 
489 
490 
491 
492 
493 
495 
496 
500 
507 
508 
509 
510 
511 
512 
513 
514  Transform transformFromRotX(const float pRotX);
515 
519 
526 
527 
528 
529 
530 
531 
532 
533  Transform transformFromRotY(const float pRotY);
534 
538 
545 
546 
547 
548 
549 
550 
551 
552  Transform transformFromRotZ(const float pRotZ);
553 
554 
568  const float& pWX,
569  const float& pWY,
570  const float& pWZ);
571 
575 
582 
583 
584 
585 
586 
587 
588 
589 
590 
592  const float& pX,
593  const float& pY,
594  const float& pZ);
595 
619  const float& pX,
620  const float& pY,
621  const float& pZ,
622  const float& pWX,
623  const float& pWY,
624  const float& pWZ);
625 
626 
634 
635 
639 
644 
645 
650 
651 
652 
653 
654  Transform pinv(const Transform& pT);
655 
656 
670  const Transform& pT1,
671  const Transform& pT2);
672 
686  const Transform& pT1,
687  const Transform& pT2);
688 
689 
702  float transformDistance(
703  const Transform& pT1,
704  const Transform& pT2);
705 
706  } // end namespace Math
707 } // end namespace AL
708 #endif // _LIBALMATH_ALMATH_TYPES_ALTRANSFORM_H_