Различия между версиями 1 и 4 (по 3 версиям)
Версия 1 от 2018-11-27 08:25:28
Размер: 2276
Редактор: FrBrGeorge
Комментарий:
Версия 4 от 2018-11-28 01:24:55
Размер: 5591
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 4: Строка 4:
== Про графики ==
Базовая статья: FrBrGeorge/PythonScaleAndRotate
Строка 8: Строка 9:
  * Ограничения по началу и концу
  * Количество точек в графике? ⇒ отрезки
  * ⇒ ломаная
  * Ограничения по началу и концу (не бесконечный, а от A до B)
  * Количество точек в графике? Бесконечно много!
   *
⇒ отрезки, а не непрерывная кривая
  * ⇒ ломаная (N точек, N-1 отрезок)
Строка 12: Строка 14:
  * Масштаб по X и Y   * Повторение: циклический конструктор списка:
  {{{
  [ выражение for имя in последователоьность ]
    или
  [ выражение for имя, имя in последователоьность_пар]
    и т. п.
  Например, [i*2+1 for i in range(6)]
  }}}
  * Подготовим черепашье поле
  {{{#!python
>>> from math import *
>>> from turtle import *
>>> reset()
}}}
  * Точки — это пары координат (x, y)
  * График — это последовательность таких пар, например
  {{{#!python
>>> graph = [(-200, -119), (-160, -100), (-120, -57), (-80, 0), (-40, 57), (0, 100), (40, 119), (80, 109), (120, 71), (160, 16), (200, -42)]
>>> def drawgraph(gr):
  penup() # Сначала перейдём на начало графика
  for x,y in gr:
    goto(x,y)
    pendown()

>>> drawgraph(graph)
}}}
  * Попробуем нарисовать график синуса:
  {{{#!python
>>> reset()
>>> graph = [(i,sin(i)) for i in range(-100,100)]
>>> drawgraph(graph)
  }}}
   Фигня какая-то: волняшки слишком частые, но слишком невысокие
  * Масштаб по X и Y:
  {{{#!python
>>> reset()
>>> graph = [(i,sin(i/20)*60) for i in range(-100,100)]
>>> drawgraph(graph)
}}}
   Но это уже непонятно чего график. В каких границах?


=== Попробуем разобраться ===
Строка 14: Строка 58:
  * Количество замеров
  * В заборе 10 досок, значит, в нём 9 дыр!
  * В заборе 10 досок, значит, в нём 9 щелей!
  * Количество замеров: график функции `f(x)` на интервале `[a,b]`
   * — это ломаная, которая начинается в точке `(a,f(a))`, а заканчивается в точке `(b, f(b))`.
   * Если в ней `N` вершин, то отрезков в ней `N-1`.
   * Абсциссы вершин находятся на равном расстоянии друг от друга, т. е. на расстоянии `(b-a)/(N-1)`
  * Допустим, вершин у нас `10`, значит, отрезков `9`; допусти также, что `a=-6`, `b=3`
   * Расстояние между абсциссами `(3-(-6))/9 == 1`
   * абсцисса 0-й вершины — начало интервала, `a`, т. е. `-6`
   * абсцисса 1-й вершины — начало отрезка + первый отрезок, т. е `a+(b-a)/(N-1)`, т. е. `-6+1*1 == -5`
   * абсцисса 2-й вершины — начало отрезка + первых два отрезка, т. е `a+2*(b-a)/(N-1)`, т. е. `-6+2*1 == -4`
   * …
   * абсцисса 8-й (№ N-2) вершины — `a+(N-2)*(b-a)/(N-1)`, т. е. `-6+8*1 == 2`
   * абсцисса 9-й (№ N-1) вершины — `a+(N-1)*(b-a)/(N-1)`, т. е. `-6+9*1 == 2` (т. е. `b`)
   {{{#!highlight pycon
>>> a, b = -6, 3
>>> N=10
>>> X = [a+i*(b-a)/(N-1) for i in range(N)]
>>> X
[-6.0, -5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0]
}}}
'''TODO'''

Построение графика функции

Разбор Д/З

Про графики

Базовая статья: FrBrGeorge/PythonScaleAndRotate

  • Что такое график?
    • Отображение точек x:f(x)
    • ⇒ f(x) должно ∃
    • Ограничения по началу и концу (не бесконечный, а от A до B)

    • Количество точек в графике? Бесконечно много!
      • ⇒ отрезки, а не непрерывная кривая
      • ⇒ ломаная (N точек, N-1 отрезок)
  • Черепашка и график синуса
    • Повторение: циклический конструктор списка:
        [ выражение for имя in последователоьность ]
          или
        [ выражение for имя, имя in последователоьность_пар]
          и т. п.
        Например, [i*2+1 for i in range(6)]
    • Подготовим черепашье поле
         1 >>> from math import *
         2 >>> from turtle import *
         3 >>> reset()
      
    • Точки — это пары координат (x, y)
    • График — это последовательность таких пар, например
         1 >>> graph = [(-200, -119), (-160, -100), (-120, -57), (-80, 0), (-40, 57), (0, 100), (40, 119), (80, 109), (120, 71), (160, 16), (200, -42)]
         2 >>> def drawgraph(gr):
         3   penup() # Сначала перейдём на начало графика
         4   for x,y in gr:
         5     goto(x,y)
         6     pendown()
         7 
         8 >>> drawgraph(graph)
      
    • Попробуем нарисовать график синуса:
         1 >>> reset()
         2 >>> graph = [(i,sin(i)) for i in range(-100,100)]
         3 >>> drawgraph(graph)
      
      • Фигня какая-то: волняшки слишком частые, но слишком невысокие
    • Масштаб по X и Y:
         1 >>> reset()
         2 >>> graph = [(i,sin(i/20)*60) for i in range(-100,100)]
         3 >>> drawgraph(graph)
      
      • Но это уже непонятно чего график. В каких границах?

Попробуем разобраться

  • График как список координат
    • В заборе 10 досок, значит, в нём 9 щелей!
    • Количество замеров: график функции f(x) на интервале [a,b]

      • — это ломаная, которая начинается в точке (a,f(a)), а заканчивается в точке (b, f(b)).

      • Если в ней N вершин, то отрезков в ней N-1.

      • Абсциссы вершин находятся на равном расстоянии друг от друга, т. е. на расстоянии (b-a)/(N-1)

    • Допустим, вершин у нас 10, значит, отрезков 9; допусти также, что a=-6, b=3

      • Расстояние между абсциссами (3-(-6))/9 == 1

      • абсцисса 0-й вершины — начало интервала, a, т. е. -6

      • абсцисса 1-й вершины — начало отрезка + первый отрезок, т. е a+(b-a)/(N-1), т. е. -6+1*1 == -5

      • абсцисса 2-й вершины — начало отрезка + первых два отрезка, т. е a+2*(b-a)/(N-1), т. е. -6+2*1 == -4

      • абсцисса 8-й (№ N-2) вершины — a+(N-2)*(b-a)/(N-1), т. е. -6+8*1 == 2

      • абсцисса 9-й (№ N-1) вершины — a+(N-1)*(b-a)/(N-1), т. е. -6+9*1 == 2 (т. е. b)

           1 >>> a, b = -6, 3
           2 >>> N=10
           3 >>> X = [a+i*(b-a)/(N-1) for i in range(N)]
           4 >>> X
           5 [-6.0, -5.0, -4.0, -3.0, -2.0, -1.0, 0.0, 1.0, 2.0, 3.0]
           6 
        

TODO

  • Функция масштабирования+переноса (да, это аффинные преобразования, только никому не говорите, а то испугаются)
  • Координаты исходного графика vs координаты на экране
    • Вычисление масштаба и смещения по X
    • Вычисление масштаба и смещения по Y=f(X)
      • Требуют нахождения max() и min()

Д/З

  1. Внезапно — ничего из учебника, TODO про масштабирование и графики-ломаные — где?

    • Про черепашку
  2. TODO

  3. Ввести отрезок, количество точек и ширину экрана, вывести абсциссы точек на экране
  4. Ввести отрезок, количество точек, а также строку — функцию от x (например, x*sin(x**2)), вывести координаты исходных точек графика

  5. Ввести отрезок, количество точек, ширину и высоту экрана, а также строку — функцию от x (например, x*sin(x**2)), вывести координаты точек графика на экране

  6. Нарисовать всё это черепашкой
    • Нарисовать оси координат
    • Что делать, если оси координат лежат в стороне от графика, а рисовать их надо?

Python/PsyPython2018/12_FunctionGraph (последним исправлял пользователь FrBrGeorge 2018-11-29 17:38:32)