Skip to content

Instantly share code, notes, and snippets.

Created September 14, 2013 17:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/6564099 to your computer and use it in GitHub Desktop.
Save anonymous/6564099 to your computer and use it in GitHub Desktop.
Mathematica app that plays tangram
Framed@DynamicModule[{O1 = {1/6, 1/2}, O2 = {1/2, 5/6},
O3 = {11/12, 3/4}, O4 = {3/4, 1/2}, O5 = {1/2, 1/3},
O6 = {3/8, 1/8}, O7 = {5/6, 1/6}, p1 = {-.25, -.25},
p2 = {0, -.25}, p3 = {0.25, -.25}, p4 = {.5, -.25},
p5 = {.75, -.25}, p6 = {1, -.25}, p7 = {1.25, -.25}, v1, v2, v3,
v4, v5, v6, v7, r = 0.08, v0 = {1, 0},
g = Graphics[{Gray, PointSize[Medium], Point[{0, 0}]}]},
{v1, v2, v3, v4, v5, v6,
v7} = ({r, 0} + #) & /@ {p1, p2, p3, p4, p5, p6, p7};
LocatorPane[
Dynamic[{v1, v2, v3, v4, v5, v6, v7, O1, O2, O3, O4, O5, O6, O7}],
Dynamic[Graphics[{EdgeForm[], Orange,
Polygon[RotationTransform[{v0, Normalize[v1 - p1]},
O1] /@ {O1 - {1/6, 1/2} + {0, 0}, O1 - {1/6, 1/2} + {0, 1},
O1 - {1/6, 1/2} + {1/2, 1/2}}], Green,
Polygon[RotationTransform[{v0, Normalize[v2 - p2]},
O2] /@ {O2 - {1/2, 5/6} + {0, 1}, O2 - {1/2, 5/6} + {1, 1},
O2 - {1/2, 5/6} + {1/2, 1/2}}], Red,
Polygon[RotationTransform[{v0, Normalize[v3 - p3]},
O3] /@ {O3 - {11/12, 3/4} + {1, 1},
O3 - {11/12, 3/4} + {1, 1/2},
O3 - {11/12, 3/4} + {3/4, 3/4}}], Yellow,
Polygon[RotationTransform[{v0, Normalize[v4 - p4]},
O4] /@ {O4 - {3/4, 1/2} + {3/4, 3/4},
O4 - {3/4, 1/2} + {1, 1/2}, O4 - {3/4, 1/2} + {3/4, 1/4},
O4 - {3/4, 1/2} + {1/2, 1/2}}], Blue,
Polygon[RotationTransform[{v0, Normalize[v5 - p5]},
O5] /@ {O5 - {1/2, 1/3} + {1/2, 1/2},
O5 - {1/2, 1/3} + {3/4, 1/4}, O5 - {1/2, 1/3} + {1/4, 1/4}}],
Cyan, Polygon[
RotationTransform[{v0, Normalize[v6 - p6]},
O6] /@ {O6 - {3/8, 1/8} + {1/4, 1/4},
O6 - {3/8, 1/8} + {3/4, 1/4}, O6 - {3/8, 1/8} + {1/2, 0},
O6 - {3/8, 1/8} + {0, 0}}], Purple,
Polygon[RotationTransform[{v0, Normalize[v7 - p7]},
O7] /@ {O7 - {5/6, 1/6} + {1/2, 0},
O7 - {5/6, 1/6} + {1, 1/2}, O7 - {5/6, 1/6} + {1, 0}}],
Opacity[0.6], Gray, PointSize[0.02],
Point[{O1, O2, O3, O4, O5, O6, O7}], Orange, Disk[p1, r], Green,
Disk[p2, r], Red, Disk[p3, r], Yellow, Disk[p4, r], Blue,
Disk[p5, r], Cyan, Disk[p6, r], Purple, Disk[p7, r], Black,
Arrowheads[Medium],
Arrow /@ {{p1, p1 + r Normalize[v1 - p1]}, {p2,
p2 + r Normalize[v2 - p2]}, {p3,
p3 + r Normalize[v3 - p3]}, {p4,
p4 + r Normalize[v4 - p4]}, {p5,
p5 + r Normalize[v5 - p5]}, {p6,
p6 + r Normalize[v6 - p6]}, {p7,
p7 + r Normalize[v7 - p7]}}},
PlotRange -> {{-1/2, 3/2}, {-1/2, 3/2}}, ImageSize -> 600]],
Appearance -> None ]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment