def test_angle(self): v1 = np.array([1, 0, 0]) v1.reshape(-1, 1) v2 = np.array([1, 1, 0]) v1.reshape(-1, 1) v3 = np.array([1, -1, 0]) v1.reshape(-1, 1) v4 = np.array([0, 1, 0]) v1.reshape(-1, 1) self.assertAlmostEqual(FitnessFunction.angle(v1, v1), 0, 5) self.assertAlmostEqual(FitnessFunction.angle(v1, v2), 1.5707969665527344 / 2, 5) self.assertAlmostEqual(FitnessFunction.angle(v1, v3), 1.5707969665527344 / 2, 5) self.assertAlmostEqual(FitnessFunction.angle(v1, v4), 1.5707969665527344, 5)
def test_rotate(self): v1 = np.array([0, 0, -1]) v1.reshape(-1, 1) genome = np.array([0, 0, 0, math.pi/2, 0]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], 0, 5) self.assertAlmostEqual(v2[1], 1, 5) self.assertAlmostEqual(v2[2], 0, 5) genome = np.array([0, 0, 0, 0, math.pi/2]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], 0, 5) self.assertAlmostEqual(v2[1], 0, 5) self.assertAlmostEqual(v2[2], -1, 5) genome = np.array([0, 0, 0, 0, math.pi*2.5]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], 0, 5) self.assertAlmostEqual(v2[1], 0, 5) self.assertAlmostEqual(v2[2], -1, 5) genome = np.array([0, 0, 0, math.pi/2, math.pi]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], 0, 5) self.assertAlmostEqual(v2[1], -1, 5) self.assertAlmostEqual(v2[2], 0, 5) genome = np.array([0, 0, 0, math.pi/2, math.pi*1.5]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], 1, 5) self.assertAlmostEqual(v2[1], 0, 5) self.assertAlmostEqual(v2[2], 0, 5) genome = np.array([0, 0, 0, math.pi/2, math.pi*2.5]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], -1, 5) self.assertAlmostEqual(v2[1], 0, 5) self.assertAlmostEqual(v2[2], 0, 5) genome = np.array([0, 0, 0, math.pi/2, math.pi/2]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(v2[0], -1, 5) self.assertAlmostEqual(v2[1], 0, 5) self.assertAlmostEqual(v2[2], 0, 5) v1 = np.array([0, 0, -1]) v1.reshape(-1, 1) genome = np.array([0, 0, 0, math.pi/2, math.pi/4]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(FitnessFunction.angle(v2, np.array([-1, 1, 0])), 0, 5) it = 1.0 for x in range(0,int(it*math.pi)): for y in range(0,int(it*math.pi)): genome = np.array([0,0,0,y/it,x/it]) v2 = v1.dot(FitnessFunction.rotate(genome)) self.assertAlmostEqual(np.sqrt(v2.dot(v2)),1,5)