Ejemplo n.º 1
0
    def testMath(self):
        """Test the math functions.
        """
        self.assertEqual(math.pi, sl.PI)
        self.assertEqual(0.3, sl.abs(-0.3))
        self.assertEqual(math.acos(0.2), sl.acos(0.2))
        self.assertEqual(math.asin(0.2), sl.asin(0.2))
        self.assertEqual(math.atan(0.2), sl.atan(0.2))
        self.assertEqual(math.atan2(0.2, 0.5), sl.atan(0.2, 0.5))
        self.assertEqual(2, sl.ceil(1.3))
        self.assertEqual(0.3, sl.clamp(0.3, 0.0, 1.0))
        self.assertEqual(0.0, sl.clamp(-0.1, 0.0, 1.0))
        self.assertEqual(1.0, sl.clamp(1.5, 0.0, 1.0))
        self.assertEqual(math.cos(0.2), sl.cos(0.2))
        self.assertEqual(math.exp(0.2), sl.exp(0.2))
        self.assertEqual(math.degrees(0.3), sl.degrees(0.3))
        self.assertEqual(1.0, sl.floor(1.8))
        self.assertEqual(1.0 / math.sqrt(5), sl.inversesqrt(5))
        self.assertEqual(math.log(8), sl.log(8))
        self.assertEqual(math.log(8, 2), sl.log(8, 2))
        self.assertEqual(5, sl.max(1, 5, 3))
        self.assertEqual(1, sl.min(1, 5, 3))
        self.assertEqual(0.5, sl.mix(0.0, 1.0, 0.5))
        self.assertEqual(0.5, sl.mod(2.5, 1))
        self.assertEqual(16, sl.pow(4, 2))
        self.assertEqual(math.radians(45), sl.radians(45))
        self.assertEqual(2.0, sl.round(2.4))
        self.assertEqual(-1, sl.sign(-18))
        self.assertEqual(1, sl.sign(18))
        self.assertEqual(0, sl.sign(0))
        self.assertEqual(math.sin(0.2), sl.sin(0.2))
        self.assertEqual(0.5, sl.smoothstep(0.0, 1.0, 0.5))
        self.assertEqual(0.5, sl.spline(0.5, [0.0, 0.0, 1.0, 1.0]))
        self.assertEqual(4, sl.sqrt(16))
        self.assertEqual(0, sl.step(1.0, 0.5))
        self.assertEqual(1, sl.step(1.0, 1.5))
        self.assertEqual(math.tan(0.2), sl.tan(0.2))

        # For now, just make sure the functions can be called
        sl.color_cellnoise(0.3, 0.2)
        sl.color_noise(0.1, 0.3)
        sl.color_pnoise(0.1, 0.3, 2, 2)
        sl.color_random()
        sl.float_cellnoise(0.3, 0.2)
        sl.float_noise(0.1, 0.3)
        sl.float_pnoise(0.1, 0.3, 2, 2)
        sl.float_random()
        sl.point_cellnoise(0.3, 0.2)
        sl.point_noise(0.1, 0.3)
        sl.point_pnoise(0.1, 0.3, 2, 2)
        sl.point_random()
        sl.vector_cellnoise(0.3, 0.2)
        sl.vector_noise(0.1, 0.3)
        sl.vector_pnoise(0.1, 0.3, 2, 2)
Ejemplo n.º 2
0
 def testMath(self):
     """Test the math functions.
     """
     self.assertEqual(math.pi, sl.PI)
     self.assertEqual(0.3, sl.abs(-0.3))
     self.assertEqual(math.acos(0.2), sl.acos(0.2))
     self.assertEqual(math.asin(0.2), sl.asin(0.2))
     self.assertEqual(math.atan(0.2), sl.atan(0.2))
     self.assertEqual(math.atan2(0.2, 0.5), sl.atan(0.2, 0.5))
     self.assertEqual(2, sl.ceil(1.3))
     self.assertEqual(0.3, sl.clamp(0.3, 0.0, 1.0))
     self.assertEqual(0.0, sl.clamp(-0.1, 0.0, 1.0))
     self.assertEqual(1.0, sl.clamp(1.5, 0.0, 1.0))
     self.assertEqual(math.cos(0.2), sl.cos(0.2))
     self.assertEqual(math.exp(0.2), sl.exp(0.2))
     self.assertEqual(math.degrees(0.3), sl.degrees(0.3))
     self.assertEqual(1.0, sl.floor(1.8))
     self.assertEqual(1.0/math.sqrt(5), sl.inversesqrt(5))
     self.assertEqual(math.log(8), sl.log(8))
     self.assertEqual(math.log(8, 2), sl.log(8, 2))
     self.assertEqual(5, sl.max(1, 5, 3))
     self.assertEqual(1, sl.min(1, 5, 3))
     self.assertEqual(0.5, sl.mix(0.0, 1.0, 0.5))
     self.assertEqual(0.5, sl.mod(2.5, 1))
     self.assertEqual(16, sl.pow(4, 2))
     self.assertEqual(math.radians(45), sl.radians(45))
     self.assertEqual(2.0, sl.round(2.4))
     self.assertEqual(-1, sl.sign(-18))
     self.assertEqual(1, sl.sign(18))
     self.assertEqual(0, sl.sign(0))
     self.assertEqual(math.sin(0.2), sl.sin(0.2))
     self.assertEqual(0.5, sl.smoothstep(0.0, 1.0, 0.5))
     self.assertEqual(0.5, sl.spline(0.5, [0.0, 0.0, 1.0, 1.0]))
     self.assertEqual(4, sl.sqrt(16))
     self.assertEqual(0, sl.step(1.0, 0.5))
     self.assertEqual(1, sl.step(1.0, 1.5))
     self.assertEqual(math.tan(0.2), sl.tan(0.2))
     
     # For now, just make sure the functions can be called
     sl.color_cellnoise(0.3,0.2)
     sl.color_noise(0.1,0.3)
     sl.color_pnoise(0.1,0.3, 2, 2)
     sl.color_random()
     sl.float_cellnoise(0.3,0.2)
     sl.float_noise(0.1,0.3)
     sl.float_pnoise(0.1,0.3, 2, 2)
     sl.float_random()
     sl.point_cellnoise(0.3,0.2)
     sl.point_noise(0.1,0.3)
     sl.point_pnoise(0.1,0.3, 2, 2)
     sl.point_random()
     sl.vector_cellnoise(0.3,0.2)
     sl.vector_noise(0.1,0.3)
     sl.vector_pnoise(0.1,0.3, 2, 2)
Ejemplo n.º 3
0
    def testEuler(self):
        """Test the fromEuler*() and toEuler*() methods.

        The result from an fromEuler*() method is compared to an equivalent
        matrix that is composed by 3 individual rotations.
        """

        angles = [
            {
                "X": radians(20),
                "Y": radians(30),
                "Z": radians(40)
            },
            {
                "X": radians(0),
                "Y": radians(0),
                "Z": radians(0)
            },
            {
                "X": radians(350),
                "Y": radians(0),
                "Z": radians(0)
            },
            {
                "X": radians(0),
                "Y": radians(350),
                "Z": radians(0)
            },
            {
                "X": radians(0),
                "Y": radians(0),
                "Z": radians(350)
            },
        ]
        axis = {"X": vec3(1, 0, 0), "Y": vec3(0, 1, 0), "Z": vec3(0, 0, 1)}

        for order in ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]:
            for angle in angles:
                R1 = mat3.rotation(angle[order[0]], axis[order[0]])
                R2 = mat3.rotation(angle[order[1]], axis[order[1]])
                R3 = mat3.rotation(angle[order[2]], axis[order[2]])
                # Each rotation is about the *global* axis, so these rotations
                # have to be applied just in the opposite order than mentioned
                # in the fromEuler*() method name.
                C = R1 * R2 * R3
                exec('E = mat3.fromEuler%s(angle["X"], angle["Y"], angle["Z"])'
                     % order)
                self.assertEqual(E, C)

                exec('x,y,z = E.toEuler%s()' % order)
                exec('E2 = mat3.fromEuler%s(x, y, z)' % order)
                if E2 != E:
                    #                    print E
                    #                    print E2
                    msg = "The matrix E2 generated from the toEuler() angles doesn't match the original matrix E.\n"
                    msg += "Original angles: (%s, %s, %s), toEuler angles: (%s, %s, %s)" % (
                        degrees(angle["X"]), degrees(
                            angle["Y"]), degrees(angle["Z"]), degrees(x),
                        degrees(y), degrees(z))
                    self.fail(msg)
Ejemplo n.º 4
0
    def testEuler(self):
        """Test the fromEuler*() and toEuler*() methods.

        The result from an fromEuler*() method is compared to an equivalent
        matrix that is composed by 3 individual rotations.
        """

        angles = [
            {"X": radians(20), "Y": radians(30), "Z": radians(40)},
            {"X": radians(0), "Y": radians(0), "Z": radians(0)},
            {"X": radians(350), "Y": radians(0), "Z": radians(0)},
            {"X": radians(0), "Y": radians(350), "Z": radians(0)},
            {"X": radians(0), "Y": radians(0), "Z": radians(350)},
        ]
        axis = {"X": vec3(1, 0, 0), "Y": vec3(0, 1, 0), "Z": vec3(0, 0, 1)}

        for order in ["XYZ", "YZX", "ZXY", "XZY", "YXZ", "ZYX"]:
            for angle in angles:
                R1 = mat3.rotation(angle[order[0]], axis[order[0]])
                R2 = mat3.rotation(angle[order[1]], axis[order[1]])
                R3 = mat3.rotation(angle[order[2]], axis[order[2]])
                # Each rotation is about the *global* axis, so these rotations
                # have to be applied just in the opposite order than mentioned
                # in the fromEuler*() method name.
                C = R1 * R2 * R3
                exec('E = mat3.fromEuler%s(angle["X"], angle["Y"], angle["Z"])' % order)
                self.assertEqual(E, C)

                exec("x,y,z = E.toEuler%s()" % order)
                exec("E2 = mat3.fromEuler%s(x, y, z)" % order)
                if E2 != E:
                    #                    print E
                    #                    print E2
                    msg = "The matrix E2 generated from the toEuler() angles doesn't match the original matrix E.\n"
                    msg += "Original angles: (%s, %s, %s), toEuler angles: (%s, %s, %s)" % (
                        degrees(angle["X"]),
                        degrees(angle["Y"]),
                        degrees(angle["Z"]),
                        degrees(x),
                        degrees(y),
                        degrees(z),
                    )
                    self.fail(msg)