def test_repulsion_left(self): source = Vector2d(0,0) target = Vector2d(3,0) desired_distance = 10 expected_force = Vector2d(-7,0) self.assertEquals(desired_distance, (source + expected_force - target).mag()) self.assertEquals(expected_force, spring_force(source, target, desired_distance))
def test_attraction_right(self): source = Vector2d(0,0) target = Vector2d(10,0) desired_distance = 3 expected_force = Vector2d(7,0) self.assertEquals(desired_distance, (source + expected_force - target).mag()) self.assertEquals(expected_force, spring_force(source, target, desired_distance))
def consider_desired_length(self, piece, force, position, opposite_position): force += spring_force(position, opposite_position, piece.desired_length)
def attract_to_neighbours(self): for joint in self.joints.values(): if joint.target_position: self.force += spring_force(joint.position, joint.target_position, 1.0) * 0.3
def attract_to_neighbours(self): for other in self.file.arriving_chunks.values(): if other != self: desired_distance = abs(self.begin - other.begin) * 0.01 self.force += spring_force(self.position, other.position, desired_distance)