Проект "Рисование графика"
Цель проекта: дать понимание практического применения особенностей ЯП
Задача проекта: изучить как можно больше особенностей ЯП на примере одного упражнения
Замечания
Данные с клавиатуры можно каждый раз не вводить, а воспользоваться для этого свойством командной строки linux, набрав в терминале:
{ echo "sin(x)/x"; echo "-14,14,80,20"; } | python grap_4.py
Вывод графика в виде текста можно перенаправить на другой текстовый экран. В этом случае набирать и модифицировать команду можно в терминале с нормальным большим шрифтом, а для терминала с графиком можно установить очень маленький шрифт и, соответственно, очень большую ширину и высоту. Как это сделать.
Общая формулировка задачи
Построить и отобразить график функции
- Нулевой этап
grap_0.py Построение графика sin(x) в диапазоне от -4 до 4 на текстовом экране 80x25
grap_1.py Построение графика sin(x) в произвольно диапазоне на текстовом экране произвольных размеров
grap_1-1.py Построение (неправильное) графика произвольной функции в произвольно диапазоне на текстовом экране произвольных размеров
grap_2.py Построение графика произвольной функции в произвольном диапазоне на текстовом экране произвольных размеров
grap_3.py Построение графика произвольной функции в произвольном диапазоне на текстовом экране произвольных размеров; горизонтальная ориентация картинки
grap_4.py Построение графика произвольной функции в произвольном диапазоне на текстовом экране произвольных размеров; горизонтальная ориентация картинки; для каждой соседней пары точек строится вертикальный отрезок
Первый этап: переформулировка задачи: три измерения: границы X и F(X), размер экрана и количество точек в ломаной); простейшие экранные примитивы (точка и линия)
grap_5.py Решение задачи grap_4 в новой формулировке
- Подзадача: нарисовать (по точкам) линию из точки (x1,y1) в (x2,y2).
Вариант решения: grap_5-0.py
Алгоритмы проведения отрезка: http://algolist.ru/graphics/painting/line.php
- Подзадача: нарисовать (по точкам) линию из точки (x1,y1) в (x2,y2).
grap_5-1.py Дополнительно к grap_5 нарисовать оси координат
Использование PyGame (подпроект "Графический редактор")
pygame_0.py Программа, которая просто что-то рисует и не заканчивается, пока ее не убьют
pygame_1.py Простейшая обработка событий (кнопка мыши, закрытие окна, нажатие на клавишу)
pygame_1-1.py "Резиновая" линия
- "Резиновая" линия -- двухуровневый редизайн
pygame_2-0.py упрощенная версия
- Диаграммы состояний:
Текстовый ввод с графического экрана: диаграмма состояний и pygame_2-1-0.py пример программы
- Подтема: рисование овалов и эллипсов:
- Построение эллипса
Алгоритм Брезенхема для произвольной кривой второго порядка -- http://research.microsoft.com/en-us/um/people/awf/graphics/bres-ellipse.html (какой-то он жуткий, нет ли чего повразумительнее, например, посредством рисования двух графиков функций? -- FrBrGeorge 2009-05-12 08:21:41)
Построение эллипса в программе Grap второго этапа: grap_7.py (хорошо бы сделать отдельный пример с комментариями)
Финальная программа: pygame_2-1.py
Второй этап: построение графика с использованием PyGame
grap_6-0.py grap_5 с использованием PyGame
grap_7.py Совмещение "Графического редактора" и "Рисования произвольной функции"