return xoffset, yoffset
+ def get_backface_index(self):
+ # The backfaces have the triangles in the reverse rotational order
+ return 5 - self.index
+
def get_angle_in_plan(self):
"""The angle of a triangle in the hexaflexagon plan."""
return - ((self.index) % 2) * pi / 3.
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."""
- return ((self.index + 5) % 6 // 2) * pi * 2 / 3 - pi / 6
+ # 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
+ #
+ # 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_backface_relative_to_hexagon(self):
+
+ """"Get the angle of the triangle in the backface relative to the
+ rotation of the same triangle in the hexagon."""
+
+ backface_triangle_index = self.get_backface_index()
+ # group triangles in couples
+ group = (((backface_triangle_index + 1) % 6) // 2)
+ return pi + pi * 2 / 3 * group
def get_angle_in_hexagon(self):
"""Get the angle of the triangle in the hexagons.