Прикреплённый файл «2014-03-07-grafun-sgc.py»
Загрузка 1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 '''
4 Построение графика произвольной функции
5 в произвольном диапазоне на экране произвольных размеров
6 Используется PyGame и SGC
7 '''
8
9 from math import *
10 import sys, pygame
11 import sgc
12
13 pygame.init()
14 W,H=1000,750
15 root = sgc.surface.Screen((W,H))
16 screen = root.image
17 black = pygame.Color("black")
18 tan = pygame.Color("tan")
19 red = pygame.Color("tomato")
20 brown = pygame.Color(64,48,8)
21
22 pen,paper,width=tan,black,2
23
24 def scale(x, X0, X1, Z0, Z1):
25 'Преобразует координату x в диапазоне [X0, X1] в координату z в диапазоне [Z0, Z1]'
26 return Z0+(Z1-Z0)*(x-X0)/float(X1-X0)
27
28 def grafun(X0, X1, count, formulae):
29 'Список длиной count вида [(x, formulae(x)),..], х из диапазона [X0, X1]'
30 ret=[]
31 for i in range(count):
32 x=scale(i, 0, count-1, X0, X1)
33 y=eval(formulae)
34 ret.append((x,y))
35 return ret
36
37 def tfloat2(s):
38 x,y=s.split(',')
39 return float(x), float(y)
40
41 def recalc():
42 global needrecalc, grs, paper
43 try:
44 gr = grafun(X0, X1, W, fml)
45 paper = black
46 except:
47 paper = brown
48 return
49 Fx=zip(*gr)[1] # список [ gr[0][1], gre[1][1], gr[2][1], ... ]
50 Min, Max = min(Fx), max(Fx)
51 grs = [(x,scale(gr[x][1], Min, Max, 0, H)) for x in xrange(W)]
52 needrecalc = False
53
54 def redraw():
55 screen.fill(paper)
56 pygame.draw.lines(screen, pen, False, grs, width)
57
58 needrecalc = True
59 fml = "sin(x)"
60 X0, X1 = -4.,4.
61
62 i_fml = sgc.InputBox(label=u"функция от x", default=fml, label_side = "bottom")
63 i_fml.config(pos=(3,4))
64 i_fml.add(order=0)
65
66 ticks = 30
67 clock = pygame.time.Clock()
68 again = True
69
70 while again:
71 time = clock.tick(ticks)
72 for event in pygame.event.get():
73 if event.type == pygame.QUIT:
74 again = False
75 sgc.event(event)
76 if event.type == sgc.locals.GUI:
77 if event.widget is i_fml:
78 if event.gui_type == "enter":
79 fml = event.text
80 needrecalc = True
81 if needrecalc:
82 recalc()
83 redraw()
84 sgc.update(time)
85 pygame.display.flip()
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2014-03-14 14:56:06, 2.2 KB) [[attachment:2014-03-07-grafun-sgc.py]]
- [получить | показать] (2014-03-14 14:56:17, 2.2 KB) [[attachment:sgcradio.py]]
Вам нельзя прикреплять файлы к этой странице.