trihexaflexagon: improve get_angle_in_plan_relative_to_hexagon()
authorAntonio Ospite <ao2@ao2.it>
Wed, 27 Jun 2018 13:23:47 +0000 (15:23 +0200)
committerAntonio Ospite <ao2@ao2.it>
Thu, 28 Jun 2018 14:34:52 +0000 (16:34 +0200)
Instead of doing some arcane calculation, do what the function is meant
to do: calculate an angle relative to another angle..

This also makes the code more robust in the case the calculation of the
other angles should change for some reason.

Leave the explicit formula in the comment as documentation.

src/flexagon/trihexaflexagon.py

index faf4d90..7bd4f72 100755 (executable)
@@ -44,12 +44,22 @@ class Triangle(object):
     def get_angle_in_plan_relative_to_hexagon(self):
         """"Get the angle of the triangle in the plan relative to the rotation
         of the same triangle in the hexagon."""
-        # The meaning of the formula regarding the index is the following:
+        # The explicit formula for this angle would be:
+        #
+        #    pi + pi / 6 + (((self.index + 1) % 6) // 2) * pi * 2 / 3
+        #
+        # The meaning of the part regarding the index is the following:
         #   - rotate the indices by 1
         #   - group by 2 (because couples of triangles move together in the
         #     plan)
         #   - multiply the group by a rotation factor
-        return pi + pi / 6 + (((self.index + 1) % 6) // 2) * pi * 2 / 3
+        #
+        # The explicit formula shows clearly that triangles move in groups of
+        # 2 in the plan.
+        #
+        # However, use an implicit form for robustness, so that if the other
+        # angle functions change this one can be left untouched.
+        return self.get_angle_in_hexagon() - self.get_angle_in_plan()
 
     def get_angle_in_hexagon(self):
         """Get the angle of the triangle in the hexagons.