12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- #万花尺程序,通过命令行输入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()
|