Browse Source

万花尺程序

万花尺程序,通过命令行输入R,r,a 三个数来产生最终效果。
猫行天下 7 years ago
parent
commit
30c79b8c7f
1 changed files with 46 additions and 0 deletions
  1. 46 0
      Spirograph

+ 46 - 0
Spirograph

@@ -0,0 +1,46 @@
+#万花尺程序,通过命令行输入R,r,a 三个数来产生最终效果。
+'''
+x(t) = (R+r)cos(t)-(r+a)cos((R+r)t/r)
+y(t) = (R+e)sin(t)-(r+a)sin((R+r)t/r)
+
+'''
+
+import sys
+import math
+from stdpackage import stddraw,stdarray
+
+def draw_spirograph(R,r,a):
+    stddraw.setXscale(-40,40)
+    stddraw.setYscale(-40,40)
+    l = 1500
+    x = stdarray.create1D(l,0)
+    y = stdarray.create1D(l,0)
+    for t in range(l):
+        x[t] = (R+r)*math.cos(t) - (r+a) * math.cos((R+r)*t/r)
+        y[t] = (R+r)*math.sin(t) - (r+a) * math.sin((R+r)*t/r)
+
+    for t in range(l+1):
+        if t >= l-1:
+            pass
+        else:
+            if t ==0:
+                stddraw.setPenColor(stddraw.RED)
+            if t==l/3:
+                stddraw.setPenColor(stddraw.DARK_BLUE)
+            if t == 2*l/3:
+                stddraw.setPenColor(stddraw.BOOK_BLUE)
+
+
+            stddraw.line(x[t],y[t],x[t+1],y[t+1])
+            stddraw.show(5)
+    stddraw.show()
+
+def main():
+
+    R = int(sys.argv[1])
+    r = int(sys.argv[2])
+    a = int(sys.argv[3])
+
+    draw_spirograph(R,r,a)
+
+main()