Clear["Global`*"]
rotate[{x1_, y1_}, {x2_, y2_}] :=
Evaluate[Simplify@RotationTransform[1. Pi/3, {x2, y2}][{x1, y1}]];
(*点(x1,y1)以点(x2,y2)为旋转中心旋转60度得到新的点*)
generate[point1_, point2_] := Module[{p1, p2, p3},
p1 = (point2 - point1)/3 + point1;
p3 = 2 (point2 - point1)/3 + point1;
p2 = rotate[p3, p1];
{point1, p1, p2, p3, point2}
]
(*从由点point1,point2连接的线段得到中间的3个点坐标*)
data[0] = N@{{0, 1}, {Sqrt[3]/2, -(1/2)}, {-(Sqrt[3]/2), -(1/2)}, {0, 1}};
data[n_] := data[n] = Flatten[generate @@@ Partition[data[n - 1], 2, 1], 1];
(*迭代得到若干点*)
pic[n_] := pic[n] = ListLinePlot[data[n], AspectRatio -> 1,
PlotRange -> {{-1.1, 1.1}, {-1.1, 1.1}}, PlotStyle -> {Red},
ImageSize -> 300, Axes -> False];
rectangle[{x1_, y1_}, {x2_, y2_}] := Module[{xmin, xmax, ymin, ymax},
{{xmin, ymin}, {xmax, ymax}} = Outer[#1@#2 &, {Min, Max}, {{x1, x2}, {y1, y2}}, 1];
{{xmin, ymin}, {xmin, ymax}, {xmax, ymax}, {xmax, ymin}, {xmin, ymin}}
]
(*从2个Locator得到正确的矩形坐标顺序*)
Export["kochcurve.gif", pic /@ Range[0, 5], "DisplayDurations" -> 0.7];
Print[Style[
"gif已保存于“我的文档”内\n\
左图为全局图,右图为局部放大图,可通过调节Locator位置查看感兴趣区域", 15]]
DynamicModule[{p1 = {-1, -1.05}, p2 = {1, 1.05}},
Manipulate[{Show[pic[n], Graphics[{Locator[Dynamic@p1], Locator[Dynamic@p2],
Blue, Line@Dynamic@rectangle[p1, p2]}]],
Dynamic@Show[pic[n], PlotRange -> Transpose[rectangle[p1, p2][[{1, 3}]]]]} // Row //
Deploy, {n, 0, 6, 1,Appearance->"Labeled"}]]
rotate[{x1_, y1_}, {x2_, y2_}] :=
Evaluate[Simplify@RotationTransform[1. Pi/3, {x2, y2}][{x1, y1}]];
(*点(x1,y1)以点(x2,y2)为旋转中心旋转60度得到新的点*)
generate[point1_, point2_] := Module[{p1, p2, p3},
p1 = (point2 - point1)/3 + point1;
p3 = 2 (point2 - point1)/3 + point1;
p2 = rotate[p3, p1];
{point1, p1, p2, p3, point2}
]
(*从由点point1,point2连接的线段得到中间的3个点坐标*)
data[0] = N@{{0, 1}, {Sqrt[3]/2, -(1/2)}, {-(Sqrt[3]/2), -(1/2)}, {0, 1}};
data[n_] := data[n] = Flatten[generate @@@ Partition[data[n - 1], 2, 1], 1];
(*迭代得到若干点*)
pic[n_] := pic[n] = ListLinePlot[data[n], AspectRatio -> 1,
PlotRange -> {{-1.1, 1.1}, {-1.1, 1.1}}, PlotStyle -> {Red},
ImageSize -> 300, Axes -> False];
rectangle[{x1_, y1_}, {x2_, y2_}] := Module[{xmin, xmax, ymin, ymax},
{{xmin, ymin}, {xmax, ymax}} = Outer[#1@#2 &, {Min, Max}, {{x1, x2}, {y1, y2}}, 1];
{{xmin, ymin}, {xmin, ymax}, {xmax, ymax}, {xmax, ymin}, {xmin, ymin}}
]
(*从2个Locator得到正确的矩形坐标顺序*)
Export["kochcurve.gif", pic /@ Range[0, 5], "DisplayDurations" -> 0.7];
Print[Style[
"gif已保存于“我的文档”内\n\
左图为全局图,右图为局部放大图,可通过调节Locator位置查看感兴趣区域", 15]]
DynamicModule[{p1 = {-1, -1.05}, p2 = {1, 1.05}},
Manipulate[{Show[pic[n], Graphics[{Locator[Dynamic@p1], Locator[Dynamic@p2],
Blue, Line@Dynamic@rectangle[p1, p2]}]],
Dynamic@Show[pic[n], PlotRange -> Transpose[rectangle[p1, p2][[{1, 3}]]]]} // Row //
Deploy, {n, 0, 6, 1,Appearance->"Labeled"}]]