Пример #1
0
 /// <summary>
 /// Multiplies 2 Similarity transformations.
 /// This concatenates the two similarity transformations into a single one, first b is applied, then a.
 /// Attention: Multiplication is NOT commutative!
 /// </summary>
 public static Similarity__x3t__ Multiply(Similarity__x3t__ a, Similarity__x3t__ b)
 {
     //a.Scale * b.Scale, a.Rot * b.Rot, a.Trans + a.Rot * a.Scale * b.Trans
     return(new Similarity__x3t__(a.Scale * b.Scale, new Euclidean__x3t__(
                                      Rot__x3t__.Multiply(a.Rot, b.Rot),
                                      a.Trans + a.Rot.TransformDir(a.Scale * b.Trans))
                                  ));
 }
Пример #2
0
 public static bool ApproxEqual(Similarity__x3t__ t0, Similarity__x3t__ t1, __ft__ angleTol, __ft__ posTol, __ft__ scaleTol)
 {
     return(t0.Scale.ApproximateEquals(t1.Scale, scaleTol) && Euclidean__x3t__.ApproxEqual(t0.EuclideanTransformation, t1.EuclideanTransformation, angleTol, posTol));
 }
Пример #3
0
 public static Similarity__x3t__ operator *(Similarity__x3t__ a, Euclidean__x3t__ b)
 {
     return(Similarity__x3t__.Multiply(a, b));
 }
Пример #4
0
 /// <summary>
 /// Transforms point p (p.w is presumed 1.0) by the inverse of the similarity transformation t.
 /// </summary>
 public static V__x3t__ InvTransformPos(Similarity__x3t__ t, V__x3t__ p)
 {
     return(t.EuclideanTransformation.InvTransformPos(p) / t.Scale);
 }
Пример #5
0
 public static bool ApproxEqual(Similarity__x3t__ t0, Similarity__x3t__ t1)
 {
     return(ApproxEqual(t0, t1, Constant <__ft__> .PositiveTinyValue, Constant <__ft__> .PositiveTinyValue, Constant <__ft__> .PositiveTinyValue));
 }
Пример #6
0
 /// <summary>
 /// Transforms direction vector v (v.w is presumed 0.0) by the inverse of the similarity transformation t.
 /// Actually, only the rotation and scale is used.
 /// </summary>
 public static V__x3t__ InvTransformDir(Similarity__x3t__ t, V__x3t__ v)
 {
     return(t.EuclideanTransformation.InvTransformDir(v) / t.Scale);
 }
Пример #7
0
 /// <summary>
 /// Transforms point p (p.w is presumed 1.0) by similarity transformation t.
 /// </summary>
 public static V__x3t__ TransformPos(Similarity__x3t__ t, V__x3t__ p)
 {
     return(t.EuclideanTransformation.TransformPos(t.Scale * p));
 }
Пример #8
0
 /// <summary>
 /// Transforms direction vector v (v.w is presumed 0.0) by similarity transformation t.
 /// Actually, only the rotation and scale is used.
 /// </summary>
 public static V__x3t__ TransformDir(Similarity__x3t__ t, V__x3t__ v)
 {
     return(t.EuclideanTransformation.TransformDir(t.Scale * v));
 }
Пример #9
0
 /// <summary>
 /// Multiplies an Euclidean transformation by a Similarity transformation.
 /// This concatenates the two transformations into a single one, first b is applied, then a.
 /// Attention: Multiplication is NOT commutative!
 /// </summary>
 public static Similarity__x3t__ Multiply(Euclidean__x3t__ a, Similarity__x3t__ b)
 {
     return(Multiply((Similarity__x3t__)a, b));
 }
Пример #10
0
 /// <summary>
 /// Multiplies a Similarity transformation by an Euclidean transformation.
 /// This concatenates the two transformations into a single one, first b is applied, then a.
 /// Attention: Multiplication is NOT commutative!
 /// </summary>
 public static Similarity__x3t__ Multiply(Similarity__x3t__ a, Euclidean__x3t__ b)
 {
     return(Multiply(a, (Similarity__x3t__)b));
 }