Jumpaku / JumpakuCurves

A library to identify geometric curves.
Other
0 stars 1 forks source link

transform Vector #256

Open Jumpaku opened 2 years ago

Jumpaku commented 2 years ago
/**
  * Transforms a Vector ignoring translation.
  */
 operator fun AffineTransform.invoke(v: Vector): Vector {
     val arr = matrix.getSubMatrix(0, 2, 0, 2).operate(v.toDoubleArray())
     return Vector(arr[0], arr[1], arr[2])
 }

 /**
  * Transforms a Vector ignoring translation.
  */
 operator fun SimilarityTransform.invoke(v: Vector): Vector = asAffine().invoke(v) 
Jumpaku commented 2 years ago

class TransformsTest {

    val vec = Vector(1.0,-2.0,3.0)

    private val similarity = SimilarityTransform.Identity
        .andThen(UniformlyScale(2.0).asSimilarity())
        .andThen(Rotate(Vector(0.0, 0.0, 1.0), FastMath.PI / 2).asSimilarity())
        .andThen(Translate(Vector(1.0, 1.0, 0.0)).asSimilarity())

    private val affine = SimilarityTransform.Identity
        .andThen(UniformlyScale(2.0).asSimilarity())
        .andThen(Rotate(Vector(0.0, 0.0, 1.0), FastMath.PI / 2).asSimilarity())
        .andThen(Translate(Vector(1.0, 1.0, 0.0)).asSimilarity())

    @Test
    fun testSimilarityTransform_Vector() {
        println("SimilarityTransform_Vector")
        val a = similarity(vec)
        val e = Vector(4.0,2.0,6.0)
        assertThat(a, `is`(closeTo(e)))
    }

    @Test
    fun testAffineTransform_Vector() {
        println("AffineTransform_Vector")
        val a = affine(vec)
        val e = Vector(4.0,2.0,6.0)
        assertThat(a, `is`(closeTo(e)))
    }
}