Прикреплённый файл «2014-01-31-grafun.py»
Загрузка 1 #!/usr/bin/env python
2 # -*- coding: UTF-8 -*-
3 '''
4 Построение графика произвольной функции
5 в произвольном диапазоне на экране произвольных размеров
6 Используется PyGame
7 '''
8
9 from math import *
10 import sys, pygame
11 from pyginput import Input
12
13 pen,paper,width=(200,250,100),(0,0,0),2
14 pygame.init()
15 W,H=1000,750
16 screen = pygame.display.set_mode((W,H))
17 imp=Input("qq")
18
19 def scale(x, X0, X1, Z0, Z1):
20 'Преобразует координату x в диапазоне [X0, X1] в координату z в диапазоне [Z0, Z1]'
21 return Z0+(Z1-Z0)*(x-X0)/float(X1-X0)
22
23 def grafun(X0, X1, count, formulae):
24 'Список длиной count вида [(x, formulae(x)),..], х из диапазона [X0, X1]'
25 ret=[]
26 for i in range(count):
27 x=scale(i, 0, count-1, X0, X1)
28 y=eval(formulae)
29 ret.append((x,y))
30 return ret
31
32 def tfloat2(s):
33 x,y=s.split(',')
34 return float(x), float(y)
35
36 fml = imp.input(screen, (10,10), u"Функция в виде формулы от x:", "sin(x) ")
37 X0, X1 = imp.input(screen, (10,10), u"Начало и конец диапазона:", "-4., 4.", SetType=tfloat2)
38 X0, X1 = float(X0), float(X1)
39
40 # вычисляем график (по одной точке на вертикальную колонку пикселей)
41 gr = grafun(X0, X1, W, fml)
42 # находим максимальное и минимальные значения функции
43 Fx=zip(*gr)[1] # список [ gr[0][1], gre[1][1], gr[2][1], ... ]
44 Min, Max = min(Fx), max(Fx)
45 # масштабируем график к экрану (x известны, они от 0 до W-1)
46 # по-хорошему, x также надо было бы вычислять из gr[*][0]
47 grs = [(x,scale(gr[x][1], Min, Max, 0, H)) for x in xrange(W)]
48
49 # рисуем график
50 pygame.draw.lines(screen, pen, False, grs, width)
51 # цикл до закрытия окна
52 while pygame.event.wait().type != pygame.QUIT:
53 pygame.display.flip()
Прикреплённые файлы
Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.- [получить | показать] (2014-02-06 23:55:19, 2.1 KB) [[attachment:2014-01-31-flyword.py]]
- [получить | показать] (2014-02-06 23:55:28, 2.0 KB) [[attachment:2014-01-31-grafun.py]]
- [получить | показать] (2014-02-06 23:55:37, 0.9 KB) [[attachment:2014-01-31-sz_hg.py]]
- [получить | показать] (2014-02-01 16:23:13, 64.4 KB) [[attachment:Vera.ttf]]
- [получить | показать] (2014-02-01 19:21:24, 0.5 KB) [[attachment:ft_size_vs_height.py]]
- [получить | показать] (2014-02-06 23:54:44, 12.5 KB) [[attachment:pyginput.py]]
- [получить | показать] (2014-02-01 19:21:53, 1.9 KB) [[attachment:pyginput_example.py]]
Вам нельзя прикреплять файлы к этой странице.