本文实例为大家分享了python实现画圆功能的具体代码,供大家参考,具体内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
import matplotlib.patches as mpatches
fig = plt.figure(figsize = ( 16 , 8 ))
ax = fig.gca()
ax.set_xlim( - 5 , 18 )
ax.set_ylim( - 5 , 8 )
alpha = np.linspace( - np.pi,np.pi, 30 )
t = np.linspace( - np.pi,np.pi, 100 )
def ppp(nc , na , c , sx , sy):
beta = alpha[na]
gam = alpha[na + 1 ]
x = [] ; y = [] ;
r = 0.5 * nc
x.append(r * np.cos(beta)) ; y.append(r * np.sin(beta)) ;
tt = np.linspace(beta,gam, 10 )
for i in range ( len (tt)):
x.append(r * np.cos(tt[i]))
y.append(r * np.sin(tt[i]))
r - = 0.5
x.append(r * np.cos(gam)) ; y.append(r * np.sin(gam))
tt = np.linspace(gam,beta, 10 )
for i in range ( len (tt)):
x.append(r * np.cos(tt[i])) ; y.append(r * np.sin(tt[i]))
x = np.array(x) ; y = np.array(y)
verts = list ( zip (x + sx,y + sy))
poly = Polygon(verts , facecolor = c , edgecolor = c)
ax.add_patch(poly)
#ppp(2,0,'r',0,0)
def get_coordiate(x , y):
beta = (alpha[y] + alpha[y + 1 ]) / 2
pr = 0.5 * (x + x - 1 ) / 2
sx = pr * np.cos(beta) ; sy = pr * np.sin(beta)
return sx,sy
def pp_arrow(x,y):
print x , y
sx , sy = get_coordiate(x, y)
for i in range ( - 1 , 2 ):
for j in range ( - 1 , 2 ):
if i = = 0 and j = = 0 :
continue
ex , ey = get_coordiate(x + i, y + j)
ax.arrow(sx,sy,ex - sx,ey - sy,head_width = 0.05 ,head_length = 0.1 ,fc = 'r' ,ec = 'r' )
def pxy(cx,cy):
for i in range ( 10 ):
plt.plot( 0.5 * i * np.cos(t) + cx, 0.5 * i * np.sin(t) + cy)
for i in range ( len (alpha)):
plt.plot(( 0.5 * np.cos(alpha) + cx, 4.5 * np.cos(alpha) + cx),( 0.5 * np.sin(alpha) + cy, 4.5 * np.sin(alpha) + cy))
cx = 13 ; cy = 0
pxy( 0 , 0 )
pxy( 13 , 0 )
mr = np.zeros(( 10 , 30 ))
mb = np.zeros(( 10 , 30 ))
for i in range ( 3 , 9 ):
for j in range ( 1 , 27 ):
ttt = np.random.random()
if ttt > = 0.98 and ttt < = 1 :
ppp(i,j, 'r' , 0 , 0 )
mr[i][j] = 1
continue
if ttt < 0.8 :
continue
else :
ppp(i,j, 'b' , 0 , 0 )
mb[i][j] = 1
for i in range ( 10 ):
for j in range ( 30 ):
if mr[i][j] = = 0 :
continue
pp_arrow(i, j)
ma = 0 ;posx = 1 ; posy = 1
for k in range ( - 1 , 2 ):
for s in range ( - 1 , 2 ):
mb[i + k][j + s] = 0
ttt = np.random.random()
if ttt > ma:
ma = ttt
posx = k ; posy = s
ppp(i + posx , j + posy , 'r' , 13 , 0 )
ppp(i,j, 'g' , 13 , 0 )
for i in range ( 10 ):
for j in range ( 30 ):
if mb[i][j] = = 0 :
continue
ppp(i , j , 'b' , 13 , 0 )
arrow = mpatches.Arrow( 5 , 0
, 3 , 0 ,width = 1 ,color = 'r' )
ax.add_patch(arrow)
ax.text( 6.2 , 0.5 , 'after one\nunit time' ,ha = 'center' ,va = 'center' ,color = 'y' )
xx = [ 4 , 4 , 4 ]
yy = [ 7.5 , 6.5 , 5.5 ]
c = [ 'b' , 'r' , 'g' ]
s = [ 'debris' , 'satellite' , 'the location of satellite one unit time ago' ]
for i in range ( 3 ):
print xx[i] , yy[i]
rect = mpatches.Rectangle((xx[i],yy[i]), 0.5 , 0.3 ,ec = c[i],fc = c[i] )
ax.text(xx[i] + 0.7 ,yy[i],s[i])
ax.add_patch(rect)
plt.axis( 'off' )
plt.show()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://blog.csdn.net/cq_pf/article/details/50629768