|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
题目:一个最优美的图案。
; ?" o! W/ L% E) k程序分析:无。5 m( B1 G* U, Z+ e; P4 i* ]8 Z
- import math
$ m( Y+ P; N3 k* m/ u; L1 x - from tkinter import *
, V0 ~0 D# D; R I1 Y% J, i& @ - 7 r9 X7 R, O x- E- }' F: I
- class PTS:9 G/ w3 _9 t/ Z2 S; B, ~9 j
- def __init__(self):
" ~! |9 e% B. l - self.x = 0" W+ Y# ]3 \4 |5 \
- self.y = 0
: y. P/ `5 m- R7 r! F - points = []
) W8 i6 e7 d: E9 |' G
5 F2 k( i* r" h( _: j- def LineToDemo():
! ^# c3 D, y% `' O - screenx = 4008 T& n% q5 x! L7 k1 N
- screeny = 4003 [8 T$ x; a; a/ W% l
- canvas = Canvas(width = screenx,height = screeny,bg = 'white')
- e- O; L. n% X: w+ S" o - 0 V( u% i0 e8 H0 d/ M
- AspectRatio = 0.85# G0 N+ q; e1 s W1 v8 Q
- MAXPTS = 154 `1 s8 o0 O3 L* C
- h = screeny: b2 P# ]5 t @- N) j
- w = screenx/ g9 q, O8 v' h1 k
- xcenter = w / 2/ q3 H/ r0 D: c1 G+ e1 o0 R& c
- ycenter = h / 24 p2 |# ^9 L: @) D( o
- radius = (h - 30) / (AspectRatio * 2) - 20
9 K: Y* W( p. x5 o* G - step = 360 / MAXPTS
5 w+ y3 g! g$ D" E$ M3 T3 Y$ G0 z - angle = 0.0 r, N/ E8 r; ]
- for i in range(MAXPTS):. E5 ?2 v k8 h% C/ l" ^
- rads = angle * math.pi / 180.0
- H2 m2 a! r' P X - p = PTS()% S h. t7 `; z, O
- p.x = xcenter + int(math.cos(rads) * radius)" [& x/ n* z, U; W
- p.y = ycenter - int(math.sin(rads) * radius * AspectRatio)
. w6 q$ A4 r6 W3 n0 [ - angle += step$ x6 ]0 r# a c5 f8 d4 L
- points.append(p)3 Z) {6 h5 m/ u; J" @
- canvas.create_oval(xcenter - radius,ycenter - radius,
8 m' |- i- E. i6 F$ Z1 q - xcenter + radius,ycenter + radius)! ~( X" B o; ]: u) V- W% a
- for i in range(MAXPTS):! `9 u$ |" ~+ s5 o& b4 x; x" O
- for j in range(i,MAXPTS):2 @9 l6 h+ x4 g2 m
- canvas.create_line(points[i].x,points[i].y,points[j].x,points[j].y)8 |+ v. A( z# c( a- I0 R# W
0 S Q. b) F' ?; P- canvas.pack()
$ X" w: @- v+ }2 L3 m' l" X/ S - mainloop()$ B& V& s0 ~1 {3 y$ x2 q
- if __name__ == '__main__':, q |' P5 H& A
- LineToDemo()
复制代码 |
|