Прикреплённый файл «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 из ссылки «[получить]», так как он чисто внутренний и может измениться.

Вам нельзя прикреплять файлы к этой странице.