Прикреплённый файл «grap_4.py»

Загрузка

   1 #!/usr/bin/env python
   2 # -*- coding: UTF-8 -*-
   3 '''
   4 Проект "Построение графика", версия 4
   5 Построение графика произвольной функции
   6 в произвольно диапазоне на текстовом экране произвольных размеров
   7 горизонтальная ориентация картинки
   8 непрерывные отрезки между точками
   9 '''
  10 
  11 def scale(x, X0, X1, Z0, Z1):
  12   'Преобразует координату x в диапазоне [X0, X1] в координату z в диапазоне [Z0, Z1]'
  13   return Z0+(Z1-Z0)*(x-X0)/float(X1-X0)
  14 
  15 def round(x):
  16   'Округлить x до ближайшего целого'
  17   return int(floor(x+0.5))
  18 
  19 def fun(x, eq):
  20   'Вычисляет python-выражение eq с параметром x'
  21   return eval(eq)
  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=fun(x, formulae)
  29     ret.append((x,y))
  30   return ret
  31 
  32 def dot(scr, x, y, char="*"):
  33   'Поставить точку (по умолчанию "*") на виртуальный экран scr'
  34   scr[round(y)][round(x)]=char
  35 
  36 def vline(scr, x, y1, y2, char="*"):
  37   'Нарисовать вертикальную линию (x,y1)--(x-y2) на экране scr'
  38   if y1 > y2: y1, y2 = y2, y1
  39   for i in range(round(y1),round(y2)+1):
  40     scr[i][round(x)]=char
  41 
  42 def printscreen(scr):
  43   'Выводит виртуальный экран scr на текстовый экран'
  44   print ""
  45   for l in range(len(scr)-1,-1,-1):
  46     print "".join(scr[l])
  47 
  48 from math import *
  49 fml=raw_input("Введите функцию в виде формулы от x (например, sin(x)*x ): ")
  50 X0, X1, W, H = input("Введите начало диапазона, конец диапазона, ширину и высоту экрана: ")
  51 X0, X1 = float(X0), float(X1)
  52 
  53 gr=grafun(X0, X1, W, fml)
  54 # Найдём минимум и максимум функции в этих точках
  55 Y0, Y1 = min([e[1] for e in gr]), max([e[1] for e in gr])
  56 
  57 screen=[[" "]*W for i in range(H)]  # "виртуальный экран WxH"
  58 # нарисуем график
  59 for i in range(len(gr)-1):
  60   vline(screen, scale(gr[i][0],X0, X1, 0, W-1),
  61       		scale(gr[i][1],Y0, Y1, 0, H-1),
  62       		scale(gr[i+1][1],Y0, Y1, 0, H-1))
  63 dot(screen, scale(gr[-1][0],X0, X1, 0, W-1), scale(gr[-1][1],Y0, Y1, 0, H-1))
  64 # выведем получившееся
  65 printscreen(screen)

Прикреплённые файлы

Для ссылки на прикреплённый файл в тексте страницы напишите attachment:имяфайла, как показано ниже в списке файлов. Не используйте URL из ссылки «[получить]», так как он чисто внутренний и может измениться.

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