КОМПЬЮТЕРНАЯ ГЕОМЕТРИЯ И ГЕОМЕТРИЧЕСКОЕ МОДЕЛИРОВАНИЕ (задачи) П.И. ТРОШИН Казанский федеральный университет Казань 2015 КАЗАНСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ П.И. Трошин КОМПЬЮТЕРНАЯ ГЕОМЕТРИЯ И ГЕОМЕТРИЧЕСКОЕ МОДЕЛИРОВАНИЕ (задачи) Учебно-методическое пособие Казань — 2015 УДК 004.925.8 ББК 22.151 Т 70 Трошин П. И. Компьютерная геометрия и геометрическое моделирование (задачи). Учебно-методическое пособие / П. И. Трошин. — Казань: Казанский федеральный университет, 2015. — 55 с. Учебно-методическое пособие предназначено для проведения занятий со студентами Института математики и механики им. Н. И. Лобачевского Казанского (Приволжского) федерального университета. ©Казанский федеральный университет, 2015 ©Трошин П. И., 2015 Оглавление Введение 5 1 Кривые 7 2 Дифференциальная теория кривых 1.1 Разные способы задания кривых . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.2 Кардиоида . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.1 Репер Френе, сопровождающий трехгранник . . . . . . . . . . . . . . . . . . . 2.2 Натуральные уравнения кривой: восстановление кривой по ее кривизне и кручению . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Соприкасающаяся сфера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Эволюта и эвольвента . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Локальное строение кривой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Параллельные кривые . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.7 Огибающие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.8 Каустики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.9 Кривая погони . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 10 11 12 14 15 15 16 17 18 3 Поверхности 4 Дифференциальная теория поверхностей 31 5 Кривые и поверхности второго порядка 34 3.1 3.2 3.3 3.4 3.5 3.6 3.7 Параметризованные и неявно заданные поверхности . . . . Трубчатая, циклическая и каналовая поверхности . . . . . Тор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Лист Мёбиуса . . . . . . . . . . . . . . . . . . . . . . . . . . Гиперболический параболоид как линейчатая поверхность . Однополостный гиперболоид как линейчатая поверхность . Стереографическая проекция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 19 22 23 25 26 28 30 4.1 Натуральный репер, кривые на поверхности . . . . . . . . . . . . . . . . . . . 31 4.2 Кривизны, главные направления . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3 Векторное поле, абсолютная производная, абсолютно k перенос, геодезические 32 4 Оглавление 6 Основы программирования: фракталы 7 Основы пакета 6.1 Множества Жюлиа и Мандельброта для квадратичного полинома Заполненное множество Жюлиа J(fc) . . . . . . . . . . . . . . . . . Множество Жюлиа J(fc) . . . . . . . . . . . . . . . . . . . . . . . . Множество Мандельброта M . . . . . . . . . . . . . . . . . . . . . . 6.2 Итерации на плоскости. Игра в хаос . . . . . . . . . . . . . . . . . 6.3 Итерации на плоскости. Хаотические аттракторы . . . . . . . . . . Mathematica для построения изображений 7.1 Графика . . . . . . . . . . . . . . . . . . . . . . . . Графические примитивы . . . . . . . . . . . . . . Построение графиков . . . . . . . . . . . . . . . . Совмещение изображений . . . . . . . . . . . . . . Экспорт и импорт графических объектов . . . . . 7.2 Функции, модули, процедуры . . . . . . . . . . . 7.3 Подстановки . . . . . . . . . . . . . . . . . . . . . 7.4 Решение уравнений . . . . . . . . . . . . . . . . . 7.5 Дифференцирование вектор-функций . . . . . . . 7.6 Манипулирование, динамическое представление . 7.7 Векторная алгебра . . . . . . . . . . . . . . . . . . 7.8 Операторы программирования . . . . . . . . . . . 7.9 Хитрости . . . . . . . . . . . . . . . . . . . . . . . Список литературы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 35 35 36 38 41 44 45 45 45 46 47 48 49 49 50 51 52 52 53 53 54 Введение Чем абстрактнее истина, которую ты хочешь преподать, тем сильнее ты должен обольстить ею еще и чувства. Фридрих Ницше Какой толк в книге без картинок или разговоров? Алиса Построение геометрических объектов на компьютере имеет большое значение как для создания иллюстративного материала, так и для большего понимания свойств этих объектов и принципов геометрии, лежащей в их основе. Кроме того, при этом развиваются навыки программирования. Данное пособие содержит задачи на построение и изучение свойств различных геометрических объектов, изучаемых в курсах аналитической, дифференциальной и фрактальной геометрии. В последней главе кратко описаны основные навыки владения системой Mathematica, относящиеся к задачам представления графики. Не оспаривая удобство использования и интерфейс различного программного обеспечения компьютерной математики, в данном пособии было решено в качестве основного средства моделирования использовать систему компьютерной алгебры и символьных вычислений Mathematica. Среди преимуществ этой системы — удобство работы, поддержка символьных вычислений, широкие графические возможности, удобная интерактивная справка. Ввиду сделанного выбора данное пособие может использоваться при изучения применения Mathematica в курсе высшей математики. Однако все предложенные задачи читатель легко сможет реализовать на других языках математических вычислений. - Данное учебно-методическое пособие предназначено для проведения практических занятий студентов-математиков по курсам, изучающим программирование, дифференциальную и фрактальную геометрию. 6 Оглавление Решая каждую из предложенных задач, читателю рекомендуется: ˆ решать задачу в максимально общем виде, чтобы легко можно было менять входные данные и пересчитывать результат; ˆ представлять графическое решение и ответы в наиболее информативном виде: – выбирать для построения кривые и поверхности «общего положения»; – подбирать точку обзора, размеры объектов и область для отображения необходимым образом; – отмечать и выделять на рисунке все точки и линии, использовать векторы, менять цвет объектов, их прозрачность; – снабжать графические объекты подписями; ˆ решать задачу преимуществнно в векторном виде, не переходя непосредственно к координатам; ˆ предварительно делать схематические рисунки на бумаге и выводить соответственные расчетные формулы; ˆ варьировать параметры, входящие в задачу, по возможности, используя динамическое представление. Рекомендуемое распределение задач для студентов: задачи части 1.1 — всем; задачи части 1.2 — по одной на выбор (по вариантам); задачи части 2.1 — всем; темы 2.2–2.9 — по одной на выбор (по вариантам); задачи части 3.1 — всем; темы 3.2–3.7 — по одной на выбор (по вариантам); задачи части 4.1–4.2 — всем; задачи части 4.3 — по одной на выбор (по вариантам); задачи части 5 — по одной на выбор (по вариантам); задачи частей 6.1–6.3 — по одной-двум на выбор (по вариантам). 1 Кривые 1.1 Разные способы задания кривых Задание 1.1.1. Нарисовать плоские кривые, заданные параметрически (a — параметр): ˆ r(t) = {t sin t, t cos t};  ˆ x = 1 − a(2 cos t − cos 2t), y = a(2 sin t − sin 2t) . 1.1.2. Нарисовать плоские кривые, заданные в полярной системе координат (a — параметр): ˆ ρ = cos(φ2 ); ˆ ρ = 2a(1 + cos φ). 1.1.3. Нарисовать плоские кривые, заданные неявно (a — параметр): ˆ x3 + y3 = 3axy; ˆ 2  x2 + y2 − 2ax = 4a2 x2 + y2 . 1.1.4. Нарисовать кривую, заданную пересечением двух поверхностей: x2 + y2 + z2 = 4, (x − 1)2 + y2 = 1. 2 1 0 -1 1.0 -2 0.5 0.0 0.0 0.5 1.0 - 0.5 1.5 2.0 - 1.0 8 Глава 1. Кривые 1.1.5. Нарисовать семейство плоских кривых, являющихся решением системы дифференциальных уравнений x 0 (t) = sin(x(t)), y 0 (t) = cos(x(t)). 1.1.6. Нарисовать плоскую кривую, являющуюся решением системы дифференциальных уравнений x 0 (t) = sin(tx(t)), y 0 (t) = cos(x(t)), проходящую через точку {x(0), y(0)} = {1, 0}. 1.1.7. Нарисовать пространственную кривую r(t) = {x(t), y(t), z(t)}, являющуюся решением системы дифференциальных уравнений Лоренца:    ẋ = σ(y − x), ẏ = x(r − z) − y,   ż = xy − bz, 1.2 σ = 10, r = 28, b = 8/3. 1.0 1.1.8. На одном графике нарисовать три траектории системы Лоренца: две слегка отличающиеся начальными условиями и одну с большим отличием в начальных условиях. Что можно заметить? 0.8 0.6 0.4 0.2 1.1 1.2 1.3 1.4 1.5 1.2. 1.2 Кардиоида 9 Кардиоида Задание 1.2.1. Получить кардиоиду как эпициклоиду при движении без скольжения одной окружности вдоль другой окружности того же радиуса a. 1.2.2. Получить кардиоиду как огибающую семейства окружностей с центрами на заданнной окружности радиуса a, и проходящих через фиксированную точку на этой окружности. Для этого просто постройте это семейство1 . 1.2.3. Получить кардиоиду как «педальную кривую»: её точки являются проекциями фиксированной точки на данной окружности на касатальные прямые к этой окружности. 1.2.4. Варьируя соотношение параметров, получить кардиоиду как промежуточное положение улитки Паскаля r = b + a cos θ при a = b. 1.2.5. Вместе с улиткой Паскаля изобразить ее образ при инверсии ρ(r, φ) = 1/r относительно окружности с центром в вершине улитки (в точке самопересечения). Какие кривые получаются при разных параметрах a и b? Кардиоиду можно получить и как огибающую однопараметрического семейства прямых — каустику, см. с. 17. 1 2 Дифференциальная теория кривых 2.1 Репер Френе, сопровождающий трехгранник Задание 2.1.1. Задать и построить бирегулярную параметризованную кривую r(t) (рассмотрите замкнутые и незамкнутые кривые). Выбрать на ней точку M. 2.1.2. В точке M на кривой построить репер Френе. На одном рисунке отобразить кривую, точку на ней и исходящие из нее векторы: орты касательной, главной нормали, бинормали. 2.1.3. В точке M отобразить вектор ускорения. 2.1.4. Найти кривизну и кручение кривой в точке M. 2.1.5. Подсчитать длину дуги кривой от некоторой точки M0 на кривой до точки M. 2.1.6. Итобразить центр кривизны кривой в точке M, соединив его с этой точкой. 2.1.7. Изобразить кривую, точку M и соприкасающуюся окружность в этой точке. 2.1.8. Построить плоскости трехгранника Френе. Отобразить кривую, точку на ней и следующие плоскости в этой точке (каждую на отдельном рисунке): соприкасающуюся, нормальную, спрямляющую. 2.1.9. Динамическая презентация: точка M(t) движется вдоль кривой r(t) вместе с объектами, построенными выше, выводится кривизна и кручение. Подсказка: воспользуйтесь опцией PlotRange->All. 11 2.2. Натуральные уравнения кривой: восстановление кривой по ее кривизне и кручению 2.2 Натуральные уравнения кривой: восстановление кривой по ее кривизне и кручению Известно, что своими натуральными уравнениями кривая задается единственным образом с точностью до движения в пространстве. Задание 2.2.1. Задать кривизну и кручение скалярными функциями k = k(s) и κ = κ(s). 2.2.2. Решив систему дифференциальных уравнений 1.0 0.5 Френе-Серре   ~ 0 (s) = k(s)~ν(s),  τ ~ ~ν 0 (s) = −k(s)~ τ(s) + κ(s)β(s),   β ~ 0 (s) = − κ(s)~ν(s), 0.8 0.6 0.0 0.4 1.0 0.2 0.5 0.0 0.0 k = s, κ = sin s 0.5 найти уравнения кривой и построить ее. - 1.5 - 1.0 Сколько скалярных неизвестных в этой системе? Все ли их нужно искать? - 0.5 0.5 1.0 1.5 - 0.5 k = s2 sin s 2.2.3. Какую роль играют константы интегрирова- 2.5 ния? 2.0 2.2.4. Вывести более простое дифференциальное 1.5 уравнение для частного случая плоской кривой. Нарисуйте кривую. 2.2.5. Воспользуйтесь также следующей системой 1.0 0.5 - 1.5 - 1.0 - 0.5 0.5 1.0 1.5 k = s sin s дифференциальных уравнений для нахождения уравнения плоской кривой по ее кручению: 1.5 1.0 0.5  0   x (s) = cos θ(s), y 0 (s) = sin θ(s),   θ 0 (s) = k(s). -3 -2 -1 1 2 3 - 0.5 - 1.0 - 1.5 k = s cos s 1.0 0.8 0.6 0.4 0.2 2.2.6. Что происходит, если k < 0? - 2.5 - 2.0 - 1.5 - 1.0 - 0.5 0.5 - 0.2 - 0.4 k=s+1 12 2.3 Глава 2. Дифференциальная теория кривых Соприкасающаяся сфера Зафикисруем регулярную точку на кривой t0 . Рассмотрим произвольную точку t1 на кривой в окрестности t0 . Эти две точки определяют прямую. При стремлении t1 → t0 мы получаем касательную прямую. Если рассмотреть две точки t1 , t2 в окрестности точки t0 , то они определяют окружность. При стремлении t1 , t2 → t0 окружность будет соприкасающейся. Если рассмотреть три точки t1 , t2 , t3 в окрестности точки t0 , то они определят сферу. В пределе при стремлении t1 , t2 , t3 → t0 сфера называется соприкасающейся. Соприкасающаяся сфера имеет 3-й порядок касания с кривой в соответствующей точке кривой; ее центр лежит на прямой, проходящей через центр кривизны параллельно бинормали. Все остальные сферы с центрами на этой прямой, касающиеся кривой, имеют касание порядка 2. все остальные сферы, касающиеся кривой в данной точке, имеют касание порядка 1. Соприкасающаяся сфера в пересечении с соприкасающейся плоскостью дает соприкасающуюся окружность. 2.3. 13 Соприкасающаяся сфера Задание 2.3.1. Построить соприкасающуюся окружность к выбранной вами кривой (в регулярной точке) 2.3.2. Построить соприкасающуюся сферу к этой кривой в этой точке. Её центр находится в точке rC (s) = r(s) + R(s)~ν(s) + R 0 (s) ~ β(s), κ(s) где s — наутуральный параметр кривой r(t), ~ ν — орт ~ — орт бинормали, R — радиус главной нормали, β кривизны, а κ — кручение. Как перейти от натурального параметра к произвольному? Заметьте, что dR ds dR R 0 (t) dR dR dt 0 = = : = : |r (t)| = 0 . R (s) = ds dt ds dt dt dt |r (t)| 0 Радиус соприкасающейся сферы: s R̃(s) =  R2 (s) + R 0 (s) κ(s) 2 . 2.3.3. Динамическая презентация: соприкасающаяся сфера и окружность перемещаются вдоль кривой с изменением точки касания. 2.3.4. Вместе с кривой отобразить кривую центров соприкасающихся сфер и кривую центров кривизн. Для точки M на кривой отобразить отрезок радиуса соприкасающейся окружности и отрезок, соединяющий центры соприкасающихся окружности и сферы (полярная прямая). Убедиться, что полярная прямая касается кривой центров сфер и является аналогом эволюты (в каком смысле?), а кривая центров кривизны в пространстве теряет свойство эволюты (какое?). Подсказка: нее? Используйте Sqrt[r.r] вместо Norm[r]. Почему это удоб- 14 2.4 Глава 2. Дифференциальная теория кривых Эволюта и эвольвента 5 -10 5 -5 Задание -5 2.4.1. Построить плоскую кривую вместе с семейством ее нормалей. -10 Пронаблюдать огибающую этого семейства. 2 -15 1 -20 -2 2 4 6 -1 5 -2 -10 5 -5 -3 -5 -4 -5 -10 2.4.2. Построить эволюту данной кривой, как кривую центров кривизны. -15 Убедиться, что она совпадает с огибающей выше. -20 2.4.3. Для данной кривой построить ее эвольвенты при разных значениях параметра s = 0, 1, 2, 3. Почему получающиеся параллельные кривые отстоят при этом на разных расстояниях? 2.4.4. Динамическая презентация: построить эвольвенту в виде «разматывающейся» с кривой нити (или катящейся прямой). 5 -10 5 -5 -5 -10 -15 -20 2.5. 2.5 15 Локальное строение кривой Локальное строение кривой Задание 2.5.1. Задать и построить трирегулярную параметризованную кривую r(t). 2.5.2. В точке M построить репер Френе: на одном рисунке отобразить кривую, точку на ней и исходящие из нее векторы репера Френе. 2.5.3. В точке M отобразить локальное приближение данной кривой до третьего порядка. 2.5.4. Динамическая презентация: точка M(t) движется вдоль кривой r(t) вместе с объектами, построенными выше. 2.5.5. Совпадают ли кривизна и кручение исходной кривой и ее локального приближения третьего порядка в точке M? 2.6 Параллельные кривые 2 1 Задание -2 2 4 6 2 4 6 2 4 6 -1 Для параметризованной кривой r(t) построить: -2 2.6.1. Семейство параллельных кривых с шагом 1. -4 2.6.2. Одну параллельную кривую и перпендикулярные отрезки между этими кривыми. -3 -5 2 1 -2 -1 -2 2.6.3. Одну параллельную кривую и лучи нормалей. Пронаблюдать, что параллельная кривая является эвольвентой для огибающей семейства нормалей (эволюты исходной кривой). -3 -4 -5 2 1 -2 -1 2.6.4. Построить параллельные кривые для параболы и эллипса. -2 -3 -4 -5 16 2.7 Глава 2. Дифференциальная теория кривых Огибающие 4 3 2 Задание 1 2.7.1. Построить огибающую (дискриминантную 0 кривую) однопараметрического семейства плоских кривых вместе с изображением самого семейства. 2.7.2. Динамическая презентация: -1 -2 -1 0 отображается огибающая и одна з кривых семейства, а также точки касания. Кривая семейства движется вдоль огибающей. 1 2 6 4 2 -3 -2 -1 1 2 3 2.8. 17 Каустики 2.8 Каустики Каустика — огибающая однопараметрического семейства прямых линий. Задание 2.8.1. Построить отраженный от прямой луч. 4 2.8.2. Построить отраженный от кривой луч (кривую можно задать неявным уравнением или параметрически). Как задать поле «внешних» нормалей к кривой (не меняющих направление при прохождении точки перегиба)? 3 2 1 0 2 -1 1 -2 4 2 -2 -1 0 1 2 -2 -1 0 1 2 4 0 0 3 -1 -2 2 -2 -4 -2 0 2 4 -2 -1 0 1 2 1 2.8.3. Построить семейство лучей, отраженных внутри от поверхности замкнутой кривой. Исходые лучи параллельны. 2.8.4. Построить каустику первого и второго порядков: лучи при отражении от поверхности снова отражаются. 0 -1 -2 18 2.9 Глава 2. Дифференциальная теория кривых Кривая погони Кривая погони — траектория движения «жертвы» в следующей задаче. Жертва движется на плоскости по заданной кривой r(t), t ∈ [0, t0 ] (иногда требуют, чтобы ее скорость была постоянной по модулю). Жертву преследует хищник. Условия погони: хищник стартует в момент времени t = 0 и движется с постоянной по модулю скоростью так, что его взгляд всегда направлен на жертву (он, в отличии от жертвы, постоянно корректирует свой путь). Задание 1.0 0.5 2.9.1. Вывести дифференциальное уравнение кривой погони. - 2.0 - 1.5 - 1.0 - 0.5 0.5 1.0 - 0.5 2.9.2. Построить кривую погони вместе с траектори- - 1.0 ей жертвы. 1.0 2.9.3. В произвольной точке на траектории погони 0.5 отметить хищника и отложить вектор его скорости, также отметить жертву в этот момент и убедиться, что вектор скорости действительно направлен на жертву. - 2.0 - 1.5 - 1.0 - 0.5 - 1.0 1.0 0.5 вую погони, жертву и хищника (отобразить процесс погони). - 2.0 - 1.5 - 1.0 0.5 - 1.0 1.0 ☺ 0.5 - 1.0 - 0.5 - 0.5 2.9.5. Догонит ли хищник жертву? - 1.5 - 0.5 0.5 - 0.5 - 1.0 1.0 - 0.5 2.9.4. Динамическая презентация: Отобразить кри- - 2.0 0.5 1.0 1.0 Поверхности 3.1 3 Параметризованные и неявно заданные поверхности Для наглядности вместе с поверхностью отобразите ее образующие, ляющие, оси вращения и т.д. Задание 3.1.1. Построить параметризованную поверхность r = r(u, v). 3.1.2. Построить цилиндрическую поверхность поверхность. 3.1.3. Построить коническую поверхность. 3.1.4. Построить торсовую поверхность: поверхность, образованную касательными к данной кривой. направ- 20 Глава 3. 3.1.5. Построить поверхность вращения. Каким образом осуществить вращение вокруг произвольной оси? 3.1.6. Построить поверхность вращения прямой вокруг скрещивающейся с ней оси. Как называется получающаяся поверхность? 3.1.7. Построить поверхность переноса. В частности, перенос параболы вдоль другой параболы. Какие поверхности при этом получаются? Динамическая презентация: осуществить процесс параллельного переноса одной кривой вдоль другой. 3.1.8. Построить поверхность, заданную неявно, например кубическую поверхность Клебша, содержащую ровно 27 прямых линий: 81(x3+ y3+ z3 ) − 189(x2 y+ x2 z+ y2 x+ y2 z+ z2 x+ z2 y) + 54xyz+126(xy+xz+yz)−9(x2+y2+z2 )−9(x+y+z)+1 = 0. Или поверхность обезьяньего седла : z = x3 − 3xy2 (в общем случае k спусков: z(x, y) = Re(x + iy)k ). Поверхности 3.1. Параметризованные и неявно заданные поверхности 3.1.9. Построить псевдосферу. 3.1.10. Построить поверхность Дини постоянной 1 кривизны K = − a2 +b 2:    x(u, v) = a cos u sin v, r(u, v) = y(u, v) = a sin u sin v,   z(u, v) = a(cos v + ln tg v ) + bu. 2 3.1.11. Динамическая презентация: построить деформацию геликоида в катеноид. 21 22 Глава 3. 3.2 Поверхности Трубчатая, циклическая и каналовая поверхности Задание 3.2.1. Построить трубчатую 3.2.2. Построить циклическую поверхность: вдоль некоторой направляющей кривой движется образующая в форме окружности перпендикулярно кривой и с центром на этой кривой. Радиус окружности постоянный. поверхность: вдоль некоторой направляющей кривой движется образующая в форме окружности перпендикулярно кривой и с центром на этой кривой. Радиус окружности может быть переменным. 3.2.3. Построить поверхность: вдоль некоторой направляющей кривой движется образующая в форме плоской выпуклой замкнутой кривой, форма которой может непрерывно меняться, а плоскость — оставаться перпендикулярно направляющей кривой или образовывать с ней постоянный угол или быть параллельной некоторой фиксированной плоскости. каналовую 3.2.4. Построить трубчатую поверхность с образующей — кривой, заузленной в пространстве, например, трехлистник (его можно получить в виде замкнутой линии на поверхности тора): r(t) = {sin t + 2 sin 2t, cos t − 2 cos 2t, − sin 3t}. Похожий результат KnotData["Trefoil"]. дает команда 3.3. 3.3 23 Тор Тор Тор T 2 = S1 × S1 является примером поверхности вращения, а также — трубчатой поверхности. Тор получается вращением окружности вокруг оси, находящейся в плоскости окружности, но не пересекающей окружность. Тор можно получить как трубчатую поверхность с направляющей окружностью. С точки зрения алгебраической топологии тор — фактор множество Z2π × Z2π . Задание 3.3.1. Построить тор. 3.3.2. Построить семейство кривых на торе, пересекающих образующие под постоянным углом: u(t) = mt, m, n, t ∈ R. v(t) = nt, Заметить, при каких значениях угла получаются замкнутые кривые. Что происходит в случае незамкнутых обмоток тора? Если m, n ∈ Z, какую геометрическую интерпретацию можно дать этим числам? 3.3.3. Построить модель тора и кривых на нем в квадрате [0, 2π] × [0, 2π]. Чем удобнее такая модель (обратите внимание на точки переечения линий)? 6 5 4 3.3.4. Вывести из параметрических уравнений тора 3 его неявное уравнение: 2 1 2 2 2 2 2 2 2 2 2 (x + y + z + R − r ) − 4R (x + y ) = 0. 1 6 5 4 3 2 1 1 2 3 4 5 6 2 3 4 5 6 24 Глава 3. Поверхности Через любую точку тора можно провести четыре окружности, лежащие на нем: меридиан, параллель и две окружности Вилларсо. 3.3.5. Изобразить все четыре окружности, проходящие через одну точку на торе. 3.3.6. Построить окружности Вилларсо — сечения тора бикасательной плоскостью, проходящей через его центр. 3.3.7. Реализовать окружности Вилларсо как сечение тора сферой. 3.3.8. Зная уравнение одной окружности Вилларсо, получить уравнения любой другой: r(t) = 2 cos t + 1, p R2 − r2 sin t, r sin t 3.3.9. Найти полную кривизну и главные кривизны тора. Найти асимптотические линии. Найти эллиптические, параболические и гиперболические точки и отметить их на торе. 3.4. 3.4 Лист Мёбиуса 25 Лист Мёбиуса Лист (лента) Мёбиуса является примером линейчатой поверхности. Ее направляющей является окружность, а поле направляющих векторов прямолинейных образующих поворачиваевается в перпендикулярной к окружности плокости на π. Задание 3.4.1. Построить ленту Мёбиуса. 3.4.2. Построить поле ортов нормали к поверхности вдоль направляющей. Тем самым убедиться в неориентируемости поверхности. 3.4.3. Построить обобщение ленты Мёюиуса с n оборотами вокруг направляющей окружности. 3.4.4. Построить вариацию листа Мёбиуса с направляющей — трехлистником (или любой другой кривой). Вращение главной нормали направляющей кривой может мешать повороту ленты вокруг направляющей (можно рассмотреть винтовую линию). 3.4.5. Является ли полученная поверхность развертывающейся? 3.4.6. Является ли полученная поверхность наложимой на плоскость? 26 3.5 Глава 3. Гиперболический параболоид как Поверхности линейчатая по- верхность Каноническое уравнение гиперболического параболоида: x2 y2 2z = − p q (p, q > 0). Гиперболический параболоид содержит два семейства прямолинейных образующих (каждое семейство задано пересечением плоскостей; параметр семейства λ ∈ R):     λ √x + √y = z, q  p (I) :  √x − √y = 2λ. p q     λ √x − √y = z, q  p (II) :  √x + √y = 2λ. p q Задание 3.5.1. Построить Г.П. как поверхность, заданную неявно. Построить касательную плокость в выбранной точке на Г.П. Какие линии она высекает на поверхности? 3.5.2. Параметризовать Г.П. параметрами x и y и построить как параметризованную поверхность. Параметризовать Г.П. параметрами, отличными от x и y (с помощью гиперболических тригонометрических функций). Построить эту параметризованную поверхность и изучить, как выглядят координатные линии при такой параметризации. 3.5. 27 Гиперболический параболоид как линейчатая поверхность 3.5.3. Построить Г.П. как линейчатую поверхность: прямолинейная образующая движется вдоль направляющей кривой — параболы. Параметризовать Г.П. двумя новыми параметрами: положением точки на образующей, и положением образующей на направляющей. Динамическая презентация: отобразить процесс образования поверхности. Совместить два графика: параметризованной поверхности и поверхности, заданной неявно, убедиться, что они совпадают. 3.5.4. Построить часть поверхности Г.П. следующим образом: разбить два скрещивающихся отрезка AB и CD каждый на n точек и попарно соединить соответствующие точки одного отрезка с точками другого отрезка отрезками прямых. Динамическая презентация: показать, как меняется поверхность при изменении угла между скрещивающимися отрезками. Построить также вторую серию отрезков, концы которых лежат на отрезках AC и BD. Заметить, что эти отрезки лежат на том же куске гиперболоида. Параметризовать точки M на гиперболоиде новыми параметрами: простым отношением u = (AB, Mu ) и простым отношением v = (AC, Mv ). C D Mv A M Mu B 28 3.6 Глава 3. Однополостный гиперболоид как Поверхности линейчатая по- верхность Каноническое уравнение однополостного гиперболоида: x2 y2 z2 + − =1 a2 b2 c2 (a, b, c > 0). О.Г. содержит два семейства прямолинейных образующих (каждое семейство задано пересечением плоскостей; параметры семейства λ, µ ∈ R, λ2 + µ2 6= 0): (I) : λ µ x a x a   + cz = µ 1 + yb ,   − cz = λ 1 − yb . можно взять λ = cos t, µ = sin t, (II) : λ µ x a x a t ∈ [0, 2π). Задание 3.6.1. Построить О.Г. как поверхность, заданную неявно. Построить касательную плокость в выбранной точке на О.Г. Какие линии она высекает на поверхности?   + cz = µ 1 − yb ,   − cz = λ 1 + yb , 3.6. Однополостный гиперболоид как линейчатая поверхность 3.6.2. Параметризовать О.Г. параметрами x и y и построить как параметризованную поверхность. Параметризовать О.Г. параметрами, отличными от x и y (с помощью гиперболических тригонометрических функций). Построить эту параметризованную поверхность и изучить, как выглядят координатные линии при такой параметризации. 3.6.3. Построить О.Г. как линейчатую поверхность: прямолинейная образующая движется вдоль направляющей кривой — параболы. Параметризовать О.Г. двумя новыми параметрами: положением точки на образующей, и положением образующей на направляющей. Динамическая презентация: отобразить процесс образования поверхности. Совместить два графика: параметризованной поверхности и поверхности, заданной неявно; убедиться, что они совпадают. 29 30 3.7 Глава 3. Стереографическая проекция Задание 3.7.1. Задать операторы, осуществляющие стереографическую проекцию точек плоскости на сферу и обратно. 3.7.2. Нарисовать треугольник на плоскоксти и его образ на сфере. 3.7.3. Нарисовать кривую на сфере и ее образ на плоскости. 3.7.4. Каким свойством обладает стереографическая проекция? Во что переходят прямые линии и окружности на плоскости? Поверхности 4 Дифференциальная теория поверхностей 4.1 Натуральный репер, кривые на поверхности Задание 4.1.1. Построить параметризованную поверхность r = r(u, v). 4.1.2. Отметить на ней точку M и построить по- движный репер {M; ru (u, v), rv (u, v), n(u, v)}. Почему его векторы касаются сетки линий, построенной на поверхности программой Mathematica? 4.1.3. Написать оператор, находящий внутренние координаты касательного вектора по его пространственным координатам, и оператор, совершающий противоположную работу. Проверить правильность. 4.1.4. Через точку M(u0 , v0 ) провести произвольную кривую u = u(φ), v = v(φ) на поверхности, например, образ окружности: u(φ) = r(cos(φ) − 1) + u0 ; 4.2 v(φ) = r sin(φ) + v0 . Кривизны, главные направления Задание 4.2.1. Подсчитать и вывести матрицы первой и второй квадратичных форм поверхности в точке M. 4.2.2. Подсчитать полную K и среднюю 2H кривизны поверхности в точке M с помощью матриц первой и второй квадратичной формы. 4.2.3. Найти нормальную кривизну поверхности в точке M в направлении вектора a = {1, 2}, а также нормальную кривизну построенной выше кривой в точке M. 32 Глава 4. Дифференциальная теория поверхностей 4.2.4. Найти главные кривизны и главные направления поверхности в точке M. Отобразить орты векторов главных направлений вместе с подвижным репером; убедиться, что они в общем случае не совпадают. 4.2.5. Написать уравнение для индикатрисы Дюпена с помощью коэффициентов второй квадратичной формы. Ее график задается неявным уравнением в осях главных направлений. Изобразите ее. 0.5 0.0 - 0.5 - 1.0 - 0.5 0.0 0.5 1.0 4.2.6. Изобразить индикатрису Дюпена в касательной плоскости к поверхности в точке M (для этого представьте индикатрису как параметризованную кривую, используя ее определение и формулу Эйлера). 4.2.7. Построить линии кривизны в окрестности точки M, убедиться что они касаются главных направлений. 4.3 Векторное поле, абсолютная производная, абсолютно параллельный перенос, геодезические Задание 4.3.1. Вывести аналитическую формулу для оператора ортогонального проектирования точки на произвольную плоскость (символьные вычисления в Mathematica). 4.3.2. Построить проекцию кривой на поверхности на касательную плоскость к поверхности в некоторой точке этой кривой. Как связаны кривизна получившейся плоской кривой, кривизна и геодезическая кривизна исходной кривой? При проецировании кривой возникает проецирующий цилиндр. Как можно применить теорему Мёнье к данным кривым на нем? Изобразить. 4.3. Векторное поле, абсолютная производная, абсолютно k 4.3.3. Вдоль некоторой кривой на поверхности изобразить векторное поле и его производную. Убедиться, что в общем случае производная выходит из касательной плоскости и перестает быть векторным полем. 4.3.4. Вдоль некоторой кривой на поверхности изобразить векторное поле вместе с его абсолютной производной. Абсолютную производную следует задавать с помощью деривационных уравнений поверхности, а не оператором проектирования на плоскость. 4.3.5. Перенести вектор a = {1, 2} из точки M1 (u1 , v1 ) в точку M2 (u2 , v2 ), находящиеся на выбранной вами кривой, вдоль этой кривой. 4.3.6. Для данных точек M1 (u1 , v1 ) и M2 (u2 , v2 ) на поверхности найти и изобразить геодезическую линию, соединяющую эти точки. 4.3.7. Для данной точки M0 (u0 , v0 ) на поверхности найти и изобразить геодезическую линию, проходящую через эту точку в направлении a = {1, 2}. перенос, геодезические 33 5 Кривые и поверхности второго порядка Задание 5.0.1. Кривая (второго порядка), заданная неявно. Написать программу, которая позволяет по произвольному уравнению кривой второго порядка: 8 6 4 ˆ Построить изображение кривой. ˆ Изобразить центр кривой (если есть) и оси ее канонической системы координат. ˆ Найти параметры канонического уравнения кривой (a, b, p). 2 0 0 1 2 3 4 5 6 5.0.2. Изобразить пересечение двух симметричных касательных к гиперболе. К чему стремится точка пересечения, когда точки касания неограниченно удаляются? Что происходит в случае параболы? 5.0.3. Иллюстраци оптических свойств эллипса, гиперболы, параболы, заданных в канонической системе координат. 5.0.4. Поверхность (второго порядка), заданная неявно. Написать программу, которая позволяет по произвольному уравнению поверхности второго порядка: ˆ Построить изображение поверхности. ˆ Изобразить центр поверхности (если есть) и оси ее канонической системы координат. ˆ Найти параметры канонического уравнения поверхности (a, b, c, p, q). Подсказка: Eigensystem. Можно использовать команды JordanDecomposition или 6 Основы программирования: фракталы 6.1 Итерации на комплексной плоскости. Множества Жюлиа и Мандельброта для квадратичного полинома Рассмотрим некоторое отображение f : C → C (или равносильно f : R2 → R2 ). Будем рассматривать динамику точек относительно этого отображения (орбиты точек): z, f(z), f2 (z) = f(f(z)), . . . , fk (z), . . . . Для каких-то точек z эта последователность может сходиться к некоторой точке, для других — быть неограниченной, еще вариант — образовывать цикл (подумайте, какие другие варианты возможны). Выделяя точки с общими свойствами их динамики, можно получить интересные геометрические объекты. В дальнейшем мы будем рассматривать простейший квадратичный полином fc (z) = z2 + c, z, c ∈ C, c — параметр. Использование комплексных чисел в данном случае сокращает обозначения (в декартовой системе координат это отображение запишется в виде f({x, y}) = {x2 − y2 + xc , 2xy + yc }. Можно ли любое преобразование R2 записать в виде действия на компексных числах?). Заполненное множество Жюлиа J(fc ) Заполненное множество Жюлиа J(fc ) состоит из тех точек z ∈ C, орбиты которых ограничены. Для построения J(fc ) нам помогут два свойства: ˆ J(fc ) ⊂ DR = {|z| 6 R}, R = 0.5 + p 0.5 + |c|, ˆ Если ∃k : |fkc (z)| > R, то z 6∈ J(fc ). 36 Глава 6. Основы программирования: фракталы Таким образом, нам достаточно разбить круг DR на сетку из n узловых точек zi , задаться предельным числом итераций I ∈ N и итерировать каждую точку zi I раз. Если в процессе итерации точка выходит за пределы круга , мы ее не рисуем, если остается — считаем, что она лежит в множестве J(fc ). Алгоритм 6.1.1: Заполненное множество Жюлиа для функции Вход: c ∈ C, . fc (z) = z2 + c. комплексный параметр функции n ∈ N, . количество (плотность) испытуемых точек I ∈ N. . количество итераций для испытания точки Выход: Изображение множества J(fc ). 1: 2: 3: 4: 5: 6: 7: 8: 9: path = ∅; . массив точек для отображения 2 fc (z) = z + c; . инициализация итерируемой функции p R = 0.5 + 0.5 + |c|; . радиус диска DR = {|z| 6 R}, содержащего множество J(fc ) для zi ∈ DR , i = 1, . . . , n . разбиваем область DR на сетку из n точек zi повторять I раз zi = fc (zi ); . итерируем точку zi если |zi | > R, то выход из цикла; . точка zi нам не подходит если |zi | 6 R, то path = path ∪ {zi }; . zi осталась в DR после I итераций Отобразить массив точек path. Множество Жюлиа J(fc ) Помимо заполненного множества Жюлиа интересной является также его граница J(fc ) = ∂J(fc ), называемая множеством Жюлиа. Существуют разные методы ее построения. Рассмотрим наиболее простой: метод обратных итераций. Нам понадобятся два свойства: ˆ Если z — наибольший по модулю из корней уравнения f(z) = z, то z ∈ J(fc ); √ ˆ Если z ∈ J(fc ), то орбита z относительно f−1 z − c плотна в c (z) = k J(fc ) («плотно» ее заполняет). Более того, если p0 = z, pk+1 = f−1 c (p ), то pk ⊂ pk+1 . Поэтому J(fc ) ≈ pk при большом k. 6.1. Множества Жюлиа и Мандельброта для квадратичного полинома tica Заметим, что f−1 c (z) принимает два значения выдает лишь одну из ветвей корня). 37 √ √ z − c и − z − c (Mathema- Алгоритм 6.1.2: Множество Жюлиа для функции fc = z 2 + c . Метод обратных итераций. Вход: c ∈ C, . I ∈ N. . комплексный параметр функции количество итераций для испытания точки Выход: Изображение множества J(fc ). 1: 2: 3: 4: 5: 6: 7: fc (z) = z2 + c; . итерируемая функция √ √ Fc (z) = + z − c ∪ − z − c; . прообраз для fc Находим z1 , z2 — корни уравнения fc (z) = z; Находим z — наибольший по модулю из этих корней; path = {z}; . массив точек для отображения, z ∈ J(fc ) повторять I раз path = Fc (path); Отобразить массив точек path. Для простоты вычислений можно на каждом шаге итерации выбирать одну из ветвей корня случайным образом. Алгоритм 6.1.3: Множество Жюлиа для функции fc = z 2 + c . Рандомизированный метод обратных итераций. Вход: c ∈ C, I ∈ N. . . комплексный параметр функции количество итераций для испытания точки Выход: Изображение множества J(fc ). 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: fc (z) = z2 + c; . итерируемая функция √ F1c (z) = + z − c; . первая ветвь прообраза для fc √ 2 Fc (z) = − z − c; . вторая ветвь прообраза для fc Находим z1 , z2 — корни уравнения fc (z) = z; Находим z — наибольший по модулю из этих корней; path = {z}; . массив точек для отображения, z ∈ J(fc ) повторять I раз i — случайный выбор числа 1 или 2; z = Fic (z); . строим случайную обратную орбиту исходной точки z path = path ∪ {z}; Отобразить массив точек path. 38 Глава 6. Основы программирования: фракталы Множество Мандельброта M Множество Мандельброта — это множество тех параметров c ∈ C, при которых орбита нуля 0, fc (0), f2c (0) = fc (fc (0)), . . . , fkc (0), . . . ограничена: ∃Mc ∈ R ∀k ∈ N |fkc (0)| < Mc . Для построения множества Мандельброта нам понадобятся следующие два свойства: ˆ M ⊂ D2 = {|c| 6 2}; ˆ Если ∃k : |fkc (0)| > 2, то c 6∈ M. Таким образом, нам достаточно разбить круг D2 на сетку из n узловых точек zi , задаться предельным числом итераций I ∈ N и итерировать каждую точку zi I раз. Если в процессе итерации точка выходит за пределы круга , мы ее не рисуем, если остается — считаем, что она лежит в множестве M. Алгоритм 6.1.4: Множество Мандельброта Вход: c ∈ D2 = {|c| 6 2}, . M. комплексный параметр функции n ∈ N, . количество (плотность) испытуемых точек I. . количество итераций для испытания точки Выход: Изображение множества Мандельброта M. 1: 2: 3: 4: 5: 6: 7: 8: 9: path = ∅; . массив точек для отображения f(z, c) = z2 + c; . инициализация итерируемой функции для ci ∈ D2 , i = 1, . . . , n . разбиваем область D2 на сетку из n точек ci z = 0; повторять I раз z = fci (z); . итерируем точку z = 0 если |z| > R, то выход из цикла; . точка ci нам не подходит если |z| 6 R, то path = path ∪ {ci }; Отобразить массив точек path. .z=0 осталась в D2 после I итераций 6.1. 39 Множества Жюлиа и Мандельброта для квадратичного полинома Задание 6.1.1. Зафиксировать параметр c ∈ C и построить заполненное множество Жюлиа J(fc ). I = 10 6.1.2. На что влияют параметры n, I? 6.1.3. Использовать свойство симметричности J(fc ) для сокращения вычислений. 6.1.4. Изменить программу так, чтобы вычислялся и рисовался только некоторый фрагмент множества («увеличение»). 6.1.5. Изменить программу так, чтобы цвет точки вне J(fc ) зависел от ее «скорости убегания», за меру которой можно взять количество итераций, необходимых для выхода из круга DR . 6.1.6. Построить множество Жюлиа J(fc ) методом обратных итераций или его рандомизированным вариантом. 6.1.7. Изменить программу так, чтобы вычислялся и рисовался только некоторый фрагмент границы («увеличение»). I = 400 40 Глава 6. Основы программирования: фракталы 6.1.8. Построить множество Мандельброта. 6.1.9. Для сокращения вычислений использовать свойство симметричности, а также тот факт, что бо́льшая по площади часть множества заключена в кардиоиду ((x − 1/4)2 + y2 )((x − 1/4)2 + y2 + x − 1/4) < y2 /4, а вторая по площади часть — окружность (x + 1)2 + y2 < 1/16. 6.1.10. Изменить программу так, чтобы вычислялся и рисовался только некоторый фрагмент границы («увеличение»). 6.1.11. Изменить программу так, чтобы цвет точки вне M зависел от ее «скорости убегания», за меру которой можно взять количество итераций, необходимых для выхода из круга D2 . 6.2. 6.2 41 Итерации на плоскости. Игра в хаос Итерации на плоскости. Игра в хаос Рассмотрим 2 6 N ∈ N сжимающих отображений на плоскости fi : C → C (или fi : R2 → R2 ), i = 1, . . . , N. Достаточные условия сжатия: ˆ Если f : C → C, f = f(z), (fz0 = 0), ∃K : |f 0 (z)| 6 K < 1 ∀z ∈ C. ˆ Если f : R2 → R2 , f(x) = Ax + b — аффинное отображение, и собственные значения матрицы A |λi | < 1. Тогда случайная орбита произвольной точки z ∈ C притягивается к некоторому множеству A («аттрактору») и хорошо его приближает. При этом A= N S fi (A), то есть это множество состоит из деформированных копий самого i=1 себя (самоподобие). Отображения {fi }N i=1 называют системой итерированных функций, а A — ее аттрактором. Для построения аттракторов, часто являющихся фракталами, используют детерминированный и рандомизированный алгоритмы. Последний — наиболее эффективен и иногда называется игрой в хаос. Алгоритм 6.2.1: Игра в хаос. Вход: f1 , . . . , fm , points, skip. Выход: Изображение аттрактора. 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: path = ∅; x0 = ~0; повторять skip раз k = случайное число от 1 до m; x0 = fk (x0 ); повторять points раз k = случайное число от 1 до m; x0 = fk (x0 ); path = path ∪ {x0 }. Отобразить массив точек path. . итерируемые функции . количество точек . количество пропущенных точек . инициализация пустого массива . начальная точка итераций 42 Глава 6. Основы программирования: фракталы Задание 6.2.1. Методом игры в хаос построить аттракторы следующих систем итерированных функций в C: • a) f1 (z) = qz, f2 (z) = qz + 1, z ∈ C. Рассмотрите случаи q ∈ C, |q| < 1. Например: i q1 = 0.56 + 0.34i, ii q2 = 0.6 + 0.34i, iii q3 = 0.5 + 0.5i, iv q4 = α = −0.419643 − 0.606291i. • b) • c) f1 (z) = 0.5(1 + i)z, f2 (z) = 1 − 0.5(1 − i)z, √ 3/6)(1 − z), f1 (z) = (1/2 + i √ f2 (z) = (−1/2 + i 3/6)z + 1,    f1 (z) = 0.5z, • d) f2 (z) = 0.5z + 0.5,   f (z) = 0.5z + (0.25 + 0.5√3i), 3    f1 (z) = αz, • e) f2 (z) = α2 z + 1,   f (z) = α3 z + (α2 + 1), 3 z ∈ C. z ∈ C. z ∈ C. z ∈ C, α = −0.419643 − 0.606291i — один из комплексных корней характеристического уравнения чисел трибоначчи z3 − z2 − z − 1 = 0. 6.2.2. Как можно истолковать геометрически умножение переменной z на комплексное число и сложение с комплексным числом? 6.2. 43 Итерации на плоскости. Игра в хаос 6.2.3. Методом игры в хаос построить аттракторы следующих систем итерированных функций в R2 :     x x fi = Ai + bi , y y • a) i = 1, 2:   0.4 −0.3733 , A1 = 0.06 0.6   −0.8 −0.1867 . A2 = 0.1371 0.8 • b) i = 1, 2, 3:   0.5 0 A1 = , 0 −0.5   0 0.5 A2 = , 0.5 0   0.5 0 A3 = . 0 0.5 • c) i = 1, 2, 3, 4, 5:   0.1950 −0.4880 A1 = , 0.3440 0.4430   0.4620 0.4140 A2 = , −0.2520 0.3610   −0.0580 −0.0700 A3 = , 0.4530 −0.1110   −0.0350 0.0700 A4 = , −0.4690 0.0220   −0.6370 0.0000 A5 = . 0.0000 0.5010   x ∈ R2 . y  0.3533 , b1 = 0   1.1 . b2 = 0.1    0 b1 = , 1   0 b2 = , 0   0.5 b3 = . 0  b1 b2 b3 b4 b5  0.4431 = , 0.2452   0.2511 = , 0.5692   0.5976 = , 0.0969   0.4884 = , 0.5069   0.8562 = . 0.2513 6.2.4. Изменить алгоритм программы так, чтобы каждая из деформированных копий аттрактора была окрашена в свой цвет. Для этого добавим к каждой точке в получающейся последовательности аттрибут, — ее цвет, — в соответствии с номером того отображения i,каким она была получена. Хранить цвет у каждой точки неэффективно, вместо этого для записи орбиты будем сортировать точки по N массивам, которые при выводе на экран окрасим в свои цвета. Если точка z получилась под действием отображения с номером i, добавим ее в массив с номером i. 44 Глава 6. 6.3 Основы программирования: фракталы Итерации на плоскости. Хаотические аттракторы Простые отображения могут вести себя неожиданно сложным образом. Задание Постройте итерации (орбиту) zk+1 = f(zk ) следующих отображений. Попробуйте поменять коэффициенты отображения, а также начальную точку. Соединив последовательно точки орбиты, убедитесь, что она заполняет аттрактор хаотически. 6.3.1. Аттрактор отображения Тинкербеллы1 f({x, y}) = {x2 − y2 + ax + by, 2xy + cx + dy}, {a, b, c, d} = {0.9, −0.6013, 2, 0.5}, z0 = {−0.72, −0.64}. 6.3.2. Аттрактор без названия f({x, y}) = {0.6x(1 + 2x) + 0.8y(x − 1) − y2 − 0.9, 0.1x(1−6x+4y)+0.1y(1+9y)−0.4}, z0 = {−0.5, 0}. 6.3.3. Аттрактор отображения Эно f({x, y}) = {1 + 1.4x2 + y, 0.3x}, z0 = {0, 0}. Сделайте также увеличенный фрагмент. 6.3.4. Бифуркационная диаграмма Постройте итерации (орбиты) zk+1 = f(zk ), k = 1, . . . , 500, квадратичного отображения f(x) = x2 + c, z 0 = 0, при различных значениях c ∈ [−2, 0] на одном рисунке. Попробуйте отображать каждую орбиту, начиная с 50-го члена (что изменится при этом?). 1 Имя диснеевской феи из Питера Пена. Почему такое название аттрактора? Mathematica 7 Основы пакета для построения изображений 7.1 Графика Графические примитивы Простейший инстумент рисования — графические примитивы : точки, отрезки прямых, ломаные, многоугольники, стрелки, эллипсы (эллипсоиды). . . и даже текст. Чтобы «примитив» стал графическим объектом, его нужно поместить внутрь команды Graphics / Graphics3D. Кроме того, не забывайте использовать справку, в которой есть дополнительные опции к каждой команде. Наиболее полезные графические примитивы: ˆ Line[{{x1 , y2 },{x2 , y2 }}] — отрезок между точками (x1 , y1 ) и (x2 , y2 ); ˆ Line[{{x1 , y2 },. . .,{xn , yn }}] ˆ Point[{x, y}] ˆ Sphere[{x, y},r] ˆ Arrow[{{x1 , y2 },{x2 , y2 }}] — ломаная, соединяющая точки (x1 , y1 ),. . . , (xn , yn ); — точка (x, y); — сфера с центром (x, y) радиуса r (3D); — вектор (стрелка) с началом в (x1 , y1 ) и концом в (x2 , y2 ); ˆ Arrow[Tube[{{x1 , y1 , z1 }, {x2 , y2 , z2 }}]] — объемный вектор с началом в (x1 , y1 , z1 ) и концом в (x2 , y2 , z2 ) (3D); ˆ Circle[{x, y},r] ˆ Disk[{x, y},r] — окружность с центром (x, y) и радиусом r (есть возможность нарисовать эллипс); — круг с центром (x, y) и радиусом r. Цвет, толщина и стиль линий в графических примитивах задаются свойствами перед именем примитива: Graphics[Red, Thickness[0.1], Opacity[0.5], Dashed, Line[{{0,0},{1,1}}]] — полупрозрачный отрезок пунктиром красного цвета толщины 0.1. 46 Глава 7. Основы пакета MATHEMATICA для построения изображений Graphics[{PointSize[0.1], Point[{0,0}]}] — точка размера 0.1. ˆ Текст также используется как графический примитив (для надписей): Text["Text", {x, y}] — текст Text на позиции (x, y); Rotate[Text["Text", {x, y}], k Degree] Text[Style["Text", Large], {x, y}] — текст Text на позиции (x, y) под углом k градусов; — текст Text на позиции (x, y) большим размером шрифта. Graphics[Text[Style["Text", Blue, Italic, 24], {3,5}]] — текст Text на позиции (3, 5) голубым цветом наклонным шрифтом размера 24. Построение графиков Пакет Mathematica позволяет эффективно строить графики функций и поверхностей (а также кривые и поверхности). ˆ Plot[f(x),{x, a, b}] — график функции (кривая) y = f(x) на интервале x ∈ [a, b]; ˆ Plot3D[f(x, y),{x, a, b},{y, c, d}] — график функции (поверхность) y = f(x, y) в прямоугольнике (x, y) ∈ [a, b] × [c, d]; ˆ ParametricPlot[{x(t), y(t)},{t, a, b}] — график кривой, заданной параметрически r(t) = {x(t), y(t)} на интервале t ∈ [a, b]; ˆ ParametricPlot3D[{x(t), y(t), z(t)},{t, a, b}]— график кривой, заданной параметрически r(t) = {x(t), y(t), z(t)} на интервале t ∈ [a, b]; ˆ ParametricPlot3D[{x(u, v), y(u, v), z(u, v)},{u, a, b},{v, c, d}] — график поверхности, заданной параметрически r(u, v) = {x(u, v), y(u, v), z(u, v)} в прямоугольнике (u, v) ∈ [a, b] × [c, d]; ˆ ParametricPlot[ρ(φ),{t, a, b}] — график кривой, заданной в полярной системе координат ρ = ρ(φ) на интервале φ ∈ [a, b]; ˆ ContourPlot[F(x, y)==0,{x, a, b},{y, c, d}] — график кривой, заданной неявно F(x, y) = 0 в прямоугольнике (x, y) ∈ [a, b] × [c, d]; ˆ ContourPlot3D[F(x, y, z)==0,{x, a, b},{y, c, d},{z, e, f}] — график поверхности, заданной неявно F(x, y, z) = 0 в параллелепипеде (x, y, z) ∈ [a, b] × [c, d] × [e, f]. 7.1. Графика 47 Наиболее полезные графические опции: ˆ Axes->False — отключение изображения осей; ˆ Boxed->False — отключение изображения рамки; ˆ PlotStyle->Red — задание цвета графика; ˆ AspectRatio->Automatic — правильное соотношение сторон изображения; ˆ PlotRangePadding->a — отбивка изображаемой области графика на a единиц; ˆ PlotRangeClipping->False — отмена обрезки графика по его границам; ˆ ContourStyle->Red — изменение опций для ContourPlot; ˆ Mesh->None — отключение изображения координатных линий; ˆ Ticks->None — отключение изображения засечек на осях; ˆ Opacity->k — установка прозрачности графика, k ∈ [0, 1]; ˆ RegionFunction — функция, которая задает какая область (регион) из области определения графика отображается — полезна, когда нужно отобразить лишь кусок поверхности, см. примеры в справке. Совмещение изображений Часто возникает необходимость изобразить одновременно несколько графических объектов на одном рисуннке. Команда Show выводит все графические объекты на одном рисунке, эффективно совмещая их и используя опции самого первого объекта. Show[g1 ,. . . , gn ] — графические объекты g1 , . . . , gn на одном изображении. Однако получившийся результат располагается в области самого первого графического объекта и при несовпадении областей определения и значений часть объектов может быть не видна. Решить эту проблему можно двумя путями: использовать опцию PlotRangePadding у тех объектов, которые не поместились на рисунке, или используя опцию PlotRange->All самой команды Show. g1=Graphics[Circle[{1, 1}, 1]]; g2=Plot[Sin[x], {x, 0, Pi}]; Show[g2, g1, PlotRange->All] — попробуйте убрать опцию PlotRange! 48 Глава 7. Основы пакета MATHEMATICA для построения изображений Экспорт и импорт графических объектов Пакет Mathematica позволяет экспортировать и импортировать для дальнейшей обработки различные типы объектов, в том числе и графические. Импорт и экспорт (сохранение) графического объекта задаются командами Import и Export. Также можно сохранить изображение, выбрав контекстное меню рисунка, и в нем — команду Сохранить графику... Примеры: plt=Plot[Sin[x], {x, 0, 2 Pi}] Export["sinx.jpg", plt] — запись графического объекта в переменную plt. — сохранение в директорию по умолчанию. Чтобы изменить директорию по умолчанию, на папку, в которой сохранен редактируемый ноутбук, воспользуйтесь командами SetDirectory[NotebookDirectory[]] или SetDirectory["путь к папке"]. Export["D:\\sinx.jpg", plt] — сохранение в директорию D:\\ Export["sinx.jpg", plt, ImageSize->500] — сохранение изображения с горизонтальным размером в 500 пикселей. Export["sinx.jpg", plt, ImageResolution->200] — сохранение изображения с плотностью пикселей 200. Экспортировать в графику можно и другие объекты, например, формулы: Export["sinx.jpg", Integrate[1/(x^4-1), x]] — сохранение результата интегрирования в виде изображения. Export["sinx.jpg", HoldForm[Integrate[1/(x^4-1), x]]] — сохранение интеграла без вычисления в виде изображения. Графические объекты и методы их представления и записи в файл делятся на два вида: растровые и векторные изображения. ˆ Растровое изображение: в памяти хранится цвет каждого пиксела в решетке фиксированного разрешения. ˆ Векторное изображение: такие объекты как прямые линии, векторы, гладкие кривые — хранятся в аналитическом виде, что позволяет существенно сократить размер файла и повысить точность воспроизведения (нет эффекта пикселизации). 7.2. 49 Функции, модули, процедуры Если изображение состоит из векторных объектов, его лучше сохранять в векторном формате (pdf, eps, ps. . . ), а если оно состоит из большого множества отдельных точек, которые сложно описать аналитическими формулами, то следует сохранять в растровом формате (jpg, bmp, png, gif . . . ). Заметим, что для публикации графики в статье журнала, в книге или при высокоточной печати следует хранить графику в достаточно большом разрешении или в векторном формате. 7.2 Функции, модули, процедуры Для задания функции используется отложенное присвоение :=, а не =, а также не забывайте символ _ у аргумента! Примеры: f[x_]:=Sin[x] — заданий функции. f[x_]:=(a=x^2; b=a^2; Print[a]; Sin[b]) — задание процедуры (несколько действий подряд). Для избежания ошибок рекомендуется использовать модули: в них переменные локализуются. f[x_]:=Module[{a=1}, Sin[a x]] — здесь a — локальная переменная со значением по умолчанию 1. f[xx_]:=Module[{x}, D[Sin[x],x]/.x->xx] — правильное задание производной функции (см. подстановки), здесь x — локальная переменная без значения по умолчанию. 7.3 Подстановки Полноценное использование пакета Mathematica подразумевает применение подстановок. Подстановка задается правилом s=a->b" замены каждого элемента a в некотором выражении на элемент b. Применение подстановки осуществляется командой /. c/.s — применить подстановку s в выражении c. Подстановка может состоять из нескольких правил: s={a1 ->b1 ,. . . , an ->bn }. Элемент a может быть сложным выражением, например, функцией. Также см. далее решение уравнений командами Solve и DSolve и модули. 50 Глава 7. Основы пакета MATHEMATICA для построения изображений Примеры: x/.x->1 — возвращает значение 1, не изменяя значение переменной x. (x^2+x+y)/.x->1 — возвращает значение 2 + y, не изменяя значение переменной x. (x^2+x+y)/.{x->1,y->2} — возвращает значение 4, не изменяя значение переменных x и y. (y[x]+Cos[x])/.y[x]->Sin[x] 7.4 — возвращает Sin[x] + Cos[x]. Решение уравнений При решении уравнений используется логическое равенство ==, а не =! ˆ Solve[F==0] ˆ Solve[F==0, x] ˆ Solve[F==0, x, Reals] — решение уравнения F(x) = 0; — решение уравнения F(x, y) = 0 относительно x; — вещественные корни уравнения F(x) = 0; ˆ Solve[{F==0, G==0}] — решение системы уравнений F(x) = 0, G(x) = 0. Не всегда решение может задаваться аналитической формулой. В таких случаях (или когда аналитическая формула слишком громоздка) проще воспользоваться численным решением: ˆ NSolve[F==0] — приближенное решение уравнения F(x) = 0; ˆ FindRoot[F==0,{x, x0 }] — приближенное решение уравнения F(x) = 0 в окрестности точки x0 . Решение всегда представляется массивом подстановок! Примеры: s=Solve[x^2-5x+6==0] — запись решения (подстановки) в переменную s: Out[1]= x/.s Out[2]= 88x ® 2<, 8x ® 3<< 82, 3< — непосредственно получение массива решений: При решении дифференциальных уравнений используется команды DSolve и NDSolve. Ответ представляется массивом подстановок на аналитические выражения или на интерполяционные функции. 7.5. 51 Дифференцирование вектор-функций Примеры: Численное решение на интервале x ∈ [0, 5] s=NDSolve[{y’[x]+y[x]==2Sin[x], y[0]==0}, y[x], {x,0,5}] Out[3]= — представляется интерполяционной функцией: 88y@xD ® InterpolatingFunction @880., 5.<<, <>D@xD<< Аналитическое решение s=DSolve[y’[x]+y[x]==2Sin[x], y[x], x] Out[4]= 88y@xD ® ã -x C@1D - Cos@xD + Sin@xD<< — дает ответ с константой: Как видно из формы ответа, s — это множество состоящее из массива подстановок. Чтобы вытащить этот массив подстановок, надо взять первый элемент s[[1]]. Plot[y[x]/.s[[1]], {x, -0.01, 0.01}] y[x]/.s[[1]]/.x->0.001 — график решения. — вычисление значения в точке. Y[xx_,c_]:=(y[x]/.s[[1]])/.{x->xx, C[1]->c} 7.5 — запись решения в новую функцию. Дифференцирование вектор-функций Примеры: Для функции одной переменной f[t_]:={t, t^2, t^3} — достаточно символа ’ f’[t]; f’’[t] F[t_]:=f’[t] — d f d2 f d t , d t2 — производная как новая функция. Для функции двух переменных нужно использовать оператор дифференцирования и модуль D[f[u,v], u] — F[uu_,v_]:=Module[{u,v}, D[f[u,v], u]/.u->uu] ∂f ∂u — частная производная как новая функция. 52 Глава 7. 7.6 Основы пакета MATHEMATICA для построения изображений Манипулирование, динамическое представление Введите параметр в вашу графику и динамически изменяйте его при помощи Manipulate. Пример: Manipulate[Plot[Sin[x+a],{x,0,2Pi}],{a,0,Pi}] — динамическая презентация с параметром a ∈ [0, π]. a 1.0 Out[5]= 0.5 -0.5 1 2 3 4 5 6 -1.0 7.7 Векторная алгебра Векторы и матрицы записываем массивами: v={x,y}, w={x,y,z}, A={{x11,x12},{x21,x22}}. ˆ Norm[v] ˆ v1.v2 (A1.A2) ˆ Cross[v] ˆ Cross[w1.w2] ˆ Det[A] ˆ Inverse[A] ˆ Transpose[A] — длина вектора v; — скалярное произведение векторов (матриц); — повернутый на π/2 вектор v; — векторное произведение векторов w1×w2; — определитель матрицы A; — обратная матрица к A; — транспонированная матрица A; ˆ Eigenvalues[A] — массив собственных значений матрицы A; ˆ Eigenvectors[A] — массив собственных векторов матрицы A; ˆ Eigensystem[A] — массив собственных значений и собственных векторов матрицы A. 7.8. 7.8 Операторы программирования 53 Операторы программирования Для программирования вам понадобятся операторы Do, While, Break, For, If. Их синтаксис см. в справке. 7.9 Хитрости ˆ В случаях, когда вектор не задан конкретными числами, лучше вместо Norm[v] использовать Sqrt[v.v]. ˆ После преобразования выражения (например, дифференцирование) упрощайте его командой Simplify. ˆ Делайте ваши рисунки максимально информативными, а текст программы комментируйте в символах (* комментарий *). Литература [1] Мищенко, А. С. Курс дифференциальной геометрии и топологии / А. С. Мищенко, А. Т. Фоменко. — МГУ, 1980. — 439 с. [2] Рашевский, П. К. [3] Шапуков, Б. Н. Курс дифференциальной геометрии / П. К. Рашевский. — 3 изд. — М. ; Л. : ГИТТЛ, 1950. — 428 с. Дифференциальная геометрия и основы тензорного анализа. курс лекций. — [Электронный ресурс]. http://old.kpfu.ru/f5/index. php?id=7&num=2. [4] Аналитическая геометрия I. Учебное пособие к курсу / В. В. Шурыгин. — КГУ, 2006. — 98 с. http://old.kpfu.ru/f5/shurygin/ geometry1.pdf. [5] Аналитическая геометрия II. Учебное пособие к курсу / В. В. Шурыгин. — КГУ, 2008. — 70 с. http://old.kpfu.ru/f5/shurygin/ geometry2.pdf. [6] Аналитическая геометрия III. Учебное пособие к курсу / В. В. Шурыгин. — КГУ, 2007. — 101 с. http://old.kpfu.ru/f5/shurygin/ geom3.pdf. [7] Фракталы и хаос в динамических системах. Основы теории / Р. М. Кроновер. — М. : Постмаркет, 2000. — 352 с. [8] Моделирование фракталов в среде Maxima. Часть I. Фракталы на плоскости и в пространстве. Учебно-методичесское пособие / П. И. Трошин. — Казань : КФУ, 2014. — 92 с. http://kpfu.ru/docs/ F1416066913/main._1_.pdf. Шурыгин, В. В. Шурыгин, В. В. Шурыгин, В. В. Кроновер, Р. М. Трошин, П. И. Об авторе ТРОШИН Павел Игоревич. Кандидат физикоматематических наук, старший преподаватель кафедры геометрии Казанского (Приволжского) федерального университета. Основное направление научных исследований — фрактальная геометрия и динамические системы. Замечания и пожелания можно отправлять автору по адресу: Paul.Troshin@gmail.com )