4869
Комментарий:
|
4823
|
Удаления помечены так. | Добавления помечены так. |
Строка 42: | Строка 42: |
||AB̈́´|| |Ẍ́´|≤|Ÿ́´| || Ẍ́´≥0, Ÿ́´≥0 || ||AB̈́´̈́´|| |Ẍ́´̈́´|≤|Ÿ́´| || Ẍ́´̈́´<0, Ÿ́´≥0 || ||AB̈́´̈́´̈́´|| |Ẍ́´̈́´̈́´|>|Y| || Ẍ́´̈́´̈́´<0, Y≥0 || |
||AB̈́'|| |Ẍ́'|≤|Ÿ́'| || Ẍ́'≥0, Ÿ́'≥0 || ||AB̈́"|| |Ẍ́"|≤|Ÿ́'| || Ẍ́"<0, Ÿ́'≥0 || ||AB̈́"'|| |Ẍ́"'|>|Y| || Ẍ́"'<0, Y≥0 || |
Комбинаторика. PyGame
— тема по Linux
— необязательная тема
- Наиболее эффективное вычисление количества ломаных на окружности. Использование предвычисленных значений функций.
Введение в PyGame
Домашнее задание
— теоретическое задание
— новая тема
- Реализовать эффективный алгоритм для ломаных на окружности (здесь будет ссылка на математику с доски).
Поставить себе PyGame, освоиться в документации
На PyGame написать программу для рисования графика функции красиво. Либо рисовать ломаную, либо заполнять точки экрана с помощью fill. Последнее предпочтительнее, т.к. работает быстрее.
- с помощью fill нарисовать отрезок на экране.
- какой-нибудь
- толщиной 2-3 пикселя
- добавить anti-aliasing (сглаживание краев линии методом дорисовывания пикселей промежуточного цвета)
- нарисовать график нелинейной функции
- с помощью fill нарисовать отрезок на экране.
О проведении линий (по сути — прямоугольников)
Растеризация отрезков на Википедии. В нашем случае эти алгоритмы не вполне пригодны.
Общий метод: рассмотрим две параллельные прямые (границы «толстой» линии). Точки растра, целиком содержащиеся между прямых, закрасим чернилами. Точки растра, частично лежащие внутри области, закрасим цветом, смешанным из чернил и исходного цвета точки в пропорции, соответствующей площади перекрашиваемой части точки.
Если считать точки растра квадратными, придётся иметь дело с площадью 3-,4- и пятиугольников (исходник картинки в формате KSEG):
Однако вычислять площадь полученного многоугольника довольно муторно, можно посчитать точки растра круглыми (это в чём-то правда) и вычислять площадь сегмента (исходник картинки в формате KSEG):
Алгоритм перебора точек внутри области можно получить из алгоритма Ву. Для простоты вычисления заметим, что для этого алгоритма различаются 8 направлений, из которых 4 получаются из других 4 рисованием от конца к началу (исходник картинки в формате KSEG):
Начало координат, в стиле PyGame -- левый верхний угол. Для простоты начальная точка A помещена в начало координат. Имеем 4 различных параметра алгоритма (случаи AB⁺, где Y>0 аналогичны B⁺A):
AB |
|X|>|Y| |
X≥0, Y≥0 |
AB̈́' |
|Ẍ́'|≤|Ÿ́'| |
Ẍ́'≥0, Ÿ́'≥0 |
AB̈́" |
|Ẍ́"|≤|Ÿ́'| |
Ẍ́"<0, Ÿ́'≥0 |
AB̈́"' |
|Ẍ́"'|>|Y| |
Ẍ́"'<0, Y≥0 |
Вопросы «что рисовать в начале и в конце отрезка?» и «как рисовать линии толщиной < 2**0,5?» не рассматриваются