class Individual: def __init__(self, ttl_torsions = 0, \ lo_grid = Axis3(), hi_grid = Axis3(), \ rng = None): self.translation_gene = Axis3() self.rotation_gene = Quaternion() self.torsions_gene = [] self.random_translation(lo_grid, hi_grid, rng) self.random_rotation(rng) self.random_torsions(ttl_torsions, rng) def random_translation(self, lo_grid, hi_grid, rng): lo_x, lo_y, lo_z = lo_grid.xyz hi_x, hi_y, hi_z = hi_grid.xyz self.translation_gene.x = lo_x + (rng.zero_to_one() * (hi_x - lo_x)) self.translation_gene.y = lo_y + (rng.zero_to_one() * (hi_y - lo_y)) self.translation_gene.z = lo_z + (rng.zero_to_one() * (hi_z - lo_z)) def random_rotation(self, rng): self.rotation_gene.uniform(rng) def random_torsions(self, ttl_torsions, rng): self.torsions_gene = [] for i in xrange(ttl_torsions): self.torsions_gene.append(rng.neg_pi_to_pi())
def testUniform(self): exp_q = ["Quaternion: -0.5105 + -0.7011i + 0.0180j + 0.4976k", "Quaternion: 0.1267 + -0.5028i + -0.7474j + -0.4153k", "Quaternion: 0.1504 + 0.0998i + -0.3025j + 0.9359k", "Quaternion: 0.6418 + -0.5843i + 0.2151j + -0.4476k", "Quaternion: 0.9726 + -0.0334i + 0.2176j + -0.0742k", "Quaternion: 0.0096 + 0.0015i + -0.0778j + 0.9969k", "Quaternion: -0.4398 + 0.5669i + -0.2332j + -0.6564k", "Quaternion: 0.2429 + 0.2133i + -0.3556j + 0.8769k", "Quaternion: -0.0521 + -0.3024i + -0.8972j + 0.3175k"] exp_angle = [-2.0702, 2.8876, 2.8396, 1.7478, 0.4689, 3.1225, -2.2309, 2.6510, -3.0374] exp_axis = ["Axis3: -0.8153, 0.0209, 0.5787", "Axis3: -0.5069, -0.7535, -0.4187", "Axis3: 0.1009, -0.3059, 0.9467", "Axis3: -0.7619, 0.2806, -0.5837", "Axis3: -0.1437, 0.9367, -0.3193", "Axis3: 0.0015, -0.0778, 0.9970", "Axis3: 0.6312, -0.2597, -0.7309", "Axis3: 0.2199, -0.3666, 0.9040", "Axis3: -0.3028, -0.8985, 0.3179"] rng = LFSR(lfsr = 1070, bit_len = 16) q = Quaternion() for i in xrange(9): q.uniform(rng) angle, axis = q.get_angle_axis() self.assertEquals(str(q), exp_q[i]) self.assertLessEqual(angle - exp_angle[i], 0.0001) self.assertGreaterEqual(angle - exp_angle[i], -0.0001) self.assertEquals(str(axis), exp_axis[i])