
Folding an ellipse
By:
Matthen on
Nov 27th, 2012 | syntax:
None | size: 1.43 KB | hits: 208 | expires: Never
p = RandomReal[{0.2, 0.9}] (({Sin[#], Cos[#]} &)[RandomReal[]]);
R = RotationMatrix[Pi/2];
n = 33;
p2s = Table[{Sin[\[Theta]], Cos[\[Theta]]}, {\[Theta], 0, 2 Pi,
2 Pi/n}];
ns = Table[R.(p1 - p)/Norm[p1 - p], {p1, p2s}];
frame[i_] := Block[{p1, n1, m, n2},
n1 = ns[[Mod[i, n, 1]]];
p1 = p2s[[Mod[i, n, 1]]];
n2 = (p - p1)/Norm[p - p1];
n1 = n1/Norm[n1];
m = (p1 + p)/2;
Graphics[
{
{
Thick,
RGBColor[0.1, 0.1, 0.3],
Circle[{0, 0}, 1]
},
If[i > n,
If[i > 2 n,
Table[
Block[{pt, nt},
pt = p2s[[j]]; nt = ns[[j]];
{
Line[{(pt + p)/2 + 10 nt, (pt + p)/2 - 10 nt}]
}
]
, {j, i - 2 n, n}]
,
Table[
Block[{pt, nt},
pt = p2s[[j]]; nt = ns[[j]];
{
Line[{(pt + p)/2 + 10 nt, (pt + p)/2 - 10 nt}]
}
]
, {j, i - n}]
]
,
{}
],
Thick,
PointSize[Large],
Point[p1],
Point[p],
RGBColor[0.3, 0.1, 0.1],
Line[{p1, p}],
RGBColor[0.5, 0.1, 0.07],
Line[{m + 10 n1, m - 10 n1}],
FaceForm[],
EdgeForm[Black],
Polygon[{
m + 0.1 n2 + 0.1 n1,
m - 0.1 n2 + 0.1 n1,
m - 0.1 n2 - 0.1 n1,
m + 0.1 n2 - 0.1 n1
}]
}
, ImageSize -> 300, PlotRange -> 1.5]
];
Manipulate[
frame[i]
, {i, 1, 3 n, 1}]