
|
- Выбор языка программирования.
В настоящее время бурного развития информационных технологий вопрос о выборе языка программирования для создания компьютерной модели становится принципиальным. Свой выбор автор делал, руководствуясь как минимум тремя соображениями:
- Перспективность, т.е. возможность создания приложений, отвечающих современным стандартам программного обеспечения.
- Совместимость, т.е. работоспособность программы независимо от платформы компьютера и установленной ОС (операционной системы).
- Доступность, т.е. возможность размещения разработанного программного продукта во всемирной глобальной сети Internet.
Всем приведенным критериям в настоящее время отвечает симбиоз двух новейших языков программирования HTML и Java.
HTML (Hyper Text Markup Language) - базовый язык для создания гипертекста. В настоящее время это один из наиболее простых и универсальных инструментов для оформления нединамической текстовой и графической информации в виде Web-документации.
Объектно-ориентированный язык программирования Java имеет возможности по разработке любых динамических приложений (апплетов) с последующим встраиванием их кода в структуру HTML-документов.
- Структура программы.
Программа "Компьютерная реализация круговой модели Пуанкаре плоскости Лобачевского" содержит следующие пять основных разделов:
Раздел "Теория" содержит HTML-вариант настоящей пояснительной записки. В будущем в этом пункте было бы полезнее разместить теоретический материал по теме "Круговая модель Пуанкаре плоскости Лобачевского".
Раздел "Задачи" содержит в себе 20 базовых геометрических задач на построение евклидовых и неевклидовых объектов, включенных в инструментарий разработанного задачника. Раздел выполняет обучающие функции, знакомя пользователя с основными методами и алгоритмами решения задач, чертежами построений. Усвоение задач происходит по принципу "от простого к сложному", причем каждое последующее построение в качестве элемента может использовать предыдущее. В таких случаях рассуждения не дублируются: с помощью ссылок указывается в каком месте можно просмотреть соответствующие алгоритмы.
Раздел "Учебник" фактически представляет собой гиперссылку на компьютерный учебник "Модели плоскости Лобачевского" (автор: В.Е. Подран, HTML-текст: К.В. Перепёлкин, текстовый вариант - [14]) и она включена в рамки настоящего дипломного проекта по следующим двум причинам:
- это наиболее близкая по содержанию книга к теме данного проекта (в настоящей пояснительной записке на нее есть несколько ссылок);
- вторая причина - это участие автора в разработке демо-апплетов к данному HTML-учебнику.
Концепция учебника такова, что читатель по ходу изучения материала с помощью Java-демонстраций может активно применять полученные знания на практике (проверять выполнимость аксиоматики Лобачевского в круговой и плоскостной моделях Пуанкаре, устанавливать связь между моделями, строить простейшие неевклидовы образы, вычислять неевклидовы расстояния).
Раздел "Об авторах" содержит автобиографии ученых-математиков, чьи имена неразрывно связаны с созданием гиперболической геометрии: Евклида, на противоречии с постулатом о параллельных которого возникла новая геометрия, Н.И. Лобачевского - гениального русского геометра, ректора Казанского университета, первооткрывателя неевклидовой геометрии, Ж.А. Пуанкаре - французского математика и физика, предложившего столь наглядную интерпретацию плоскости Лобачевского. В разделе представлены редкие портреты и фотографии ученых.
Раздел "Задачник" - центральная часть настоящего дипломного проекта, которая содержит в своей структуре: пакет инструментальных графических средств для построения евклидовых и неевклидовых объектов, специальных средств для повышения наглядности и удобства геометрических построений и набор из 50-ти задач на построение, предлагаемых к решению. Раздел также представляет собой большую практическую ценность для создания рисунков геометрических построений (в частности, все рисунки, включенные в данную пояснительную записку и пункт "Задачи" разработанной программы сделаны с помощью задачника).
Остановимся на особенностях этого раздела подробнее.
- Реализация задачника.
Вначале отметим аргументы "за" реализацию круговой модели Пуанкаре плоскости Лобачевского на компьютере.
- Полная видимость. Формат выбранных объектов в данной модели таков, что все мыслимые объекты геометрии Лобачевского находятся в зоне прямой видимости (в отличие, например, от модели Пуанкаре на евклидовой полуплоскости, когда мы не можем в силу ограниченности экрана монитора увидеть полуокружность достаточно большого радиуса или, тем более, луч, изображающие неевклидовы прямые в данной модели).
- Нетривиальность. Построение объектов круговой модели Пуанкаре, как уже отмечалось, распадается на большее количество этапов, чем построение соответствующих объектов в плоскостной модели. Поэтому построение неевклидовых объектов на практике с помощью циркуля и линейки занятие если не сложное, то очень трудоемкое.
Совершенно разумно поручить все вспомогательные построения и вычисления компьютеру, предоставляя пользователю лишь результирующие построения на экране монитора.
Масштаб.
Естественно, что проблема с наглядностью построений не решается только "компактностью" круговой модели. Она снова появляется, когда возникает потребность в построении евклидовых объектов, не лежащих внутри круга B2 (например, евклидовых прямых или евклидовых окружностей достаточно больших радиусов). Эта проблема привычна не только для компьютерных построений, но и для построений в обычной практике. Возможны два способа решения этого вопроса:
- Увеличить размер холста, на котором происходят построения. Понятно, что при таком выходе из ситуации теперь уже весь холст не будет помещаться в экран монитора и для того, чтобы видеть его отдельные фрагменты, пользователю будет необходимо использовать полосу прокрутки (как это делается в обычных графических редакторах). Ясно, что таким образом компьютерные построения частично теряют свою наглядность.
- Изменить масштаб построений. Этот метод является более эффективным, т.к. он позволяет пользователю самостоятельно регулировать в каком масштабе проводимые построения будут наиболее наглядными. Именно этот способ реализован в настоящем дипломном проекте.
Естественно, что оба способа решают проблему лишь отчасти и балансирование между наглядностью и точностью построений - уже задача пользователя.
Дискретность.
Любые математические объекты - объекты идеального, абстрактного мира, любая попытка их реализации в материальные образы чревата различного рода искажениями. Таким же образом обстоит дело и с визуализацией образов евклидовой и неевклидовой геометрии: точка, отрезок, дуга окружности и т.д., имеющие "нулевую толщину" на экране монитора с помощью определенных алгоритмов могут быть отображены толщиной минимум в один пиксель.
В настоящее время существуют различные стандарты разрешения мониторов (640*480, 800*600, 1024*768, 1152*864 и т.д. пикселей). Понятно, что построения геометрических объектов в таких прямоугольных растровых матрицах будут приближенными, и искажения будут тем больше, чем меньше разрешение монитора. Естественно, что решение этой проблемы чисто техническое и не зависит от автора настоящей разработки.
С другой стороны растровость изображений создает другую более серьезную проблему в самом процессе компьютерных построений объектов.
Если практические построения с помощью циркуля и линейки считать идеальным случаем, то человек, делающий чертеж, фактически, руководствуется следующими негласными правилами (далее слова "близко" или "вблизи" будем употреблять в смысле "неразличимо близко, сливаются для человеческого глаза"):
- точки, лежащие близко друг от друга считаются совпавшими и обозначаются одинаково;
- точки, лежащие вблизи некоторой линии, считаются лежащими на этой линии;
- точки, лежащие вблизи точек пересечения некоторых линий, считаются совпадающими точками и обозначаются одинаково.
т.е. если человек ставит точку близко от ранее построенной точки (линии, точки пересечения линий), то он считает, что она совпадает с этой точкой (попадает на линию).
Все эти правила задают определенную точность построений: три точки, лежащие вблизи данной окружности, снова задают эту окружность, две точки, лежащие вблизи данной прямой, снова задают эту прямую и т.п.
Таким образом, чтобы создать программный образ практических геометрических построений, необходимо заставить программу явно выполнять указанные правила. Причем важность выполнения этих правил в компьютерной программе возрастает в силу растровых искажений построений. Действительно, рассмотрим следующий пример:
Предположим, что приведенные правила не выполняются и пользователь имеет возможность вводить точки, определяющие некоторый объект, только с целыми координатами (т.е. совпадающие с некоторыми пикселями). Предположим также, что пользователем построена окружность некоторого радиуса и точка. Далее требуется построить точку инверсную данной. Действия пользователя, очевидно, будут следующими:
- В начале нужно выбрать окружность инверсии (для этого нужно указать центр окружности и точку лежащую на окружности). В центр построенной окружности после определенного "прицеливания" попасть можно.
- Построение же точки, лежащей на данной окружности в общем случае оказывается задачей невыполнимой. Конечно, опять же после "прицеливания" можно попасть на некоторую точку, "лежащую" на окружности. В реальности же это будет совпадение с некоторой точкой, приближенного растрового образа реальной окружности и расстояние от этой точки до центра окружности в общем случае не будет равно реальному радиусу окружности.
- Понятно, что построение точки инверсной данной относительно окружности, уже не совпадающей с ранее построенной, даст вычислительную погрешность (причем эта погрешность может оказаться существенной, т.к. аналитическое задание инверсии использует операцию деления) к которой прибавится погрешность растрового изображения.
Если построенная точка к тому же далее будет использоваться в построениях, то о какой-либо приемлемой точности построений говорить будет нельзя.
Решение этой проблемы в настоящем дипломном проекте найдено следующее: в памяти компьютера создается виртуальный образ всех происходящих построений, а ввод точек zi, определяющих строимые объекты, пользователем осуществляется по следующей схеме:
- задается некоторое число r (назовем его радиусом совпадений), которое может принимать значения 1 пиксель, 2 пикселя, и т.д. В разработанной программе радиус совпадений равен 4;
- если в окрестность точки zi радиуса r (далее просто "окрестность") попадает некоторая, ранее построенная точка zj, то в память записывается точка zi=zj;
- если через окрестность точки zi проходит некоторая линия lj, то программа вычисляет координаты точки zk, лежащей на этой линии, такой что
(d - евклидово расстояние между точками) и в память записывается точка zi=zk.
- если в окрестности точки zi пересекаются две линии lj и lk, то программа вычисляет точку их пересечения zl и записывает в память точку zi=zl.
Очевидно, что это математический аналог ранее приведенных правил. Таким образом, пользователю дается возможность ставить не только точки, совпадающие с некоторыми пикселями, но и с точками, реальные образы (координаты) которых хранятся в памяти (точки, принадлежащие некоторым линиям, точки пересечений).
Возможность работы приведенных правил достигается с помощью математических расчетов, основанных на решении систем линейных и нелинейных (квадратных) уравнений с двумя неизвестными c граничными условиями. Фактически, все строимые в программе объекты (и евклидовы, и неевклидовы) представляют собой наборы из трех евклидовых объектов: отрезков, окружностей и дуг окружностей; граница окрестности точки zi также является окружностью. Поэтому и все расчеты сводятся к нахождению взаимных пересечений отрезков и окружностей, а это задача элементарной алгебры.
Нужно отметить, что все проблемы дискретности компьютерных построений все равно не решаются. В доказательство к этим словам можно привести следующие факты:
- Точность машинных вычислений конечна. Все введенные пользователем объекты хранятся в памяти компьютера в формате double (64 байта, -4.8e-324...1.8e+308).
- В силу растровой структуры экрана в компьютерной версии невозможно построить неевклидовы точки в круговой модели Пуанкаре, удаленные друг от друга более чем на неевклидово расстояние d=13 (при с=1 в формуле (1)). Эта проблема опять же разрешима только технически (увеличением разрешения монитора).
Наглядность.
На практике для создания наглядных чертежей обычно пользуются стирательной резинкой, с помощью которой удаляют лишние, вспомогательные построения. Ясно, что аналогичный инструмент должен быть и в компьютерном задачнике. Возможны различные способы его реализации, но автор настоящего проекта считает наиболее простым следующий:
- каждое вновь проводимое построение помечается как основное или дополнительное в зависимости от состояния соответствующей функциональной клавиши;
- с помощью двух других клавиш регулируется отображение дополнительных построений (скрывать их или отображать на экране);
- для полной очистки экрана используется клавиша "Очистить";
- последний построенный объект удаляется с помощью клавиши "Назад".
Таким образом, полностью воссоздается эффект стирательной резинки.
Реализация инструментов.
Разработанный пакет инструментальных средств содержит в себе 9 евклидовых инструментов (построение точки, отрезка, луча, прямой, окружности по трем точкам, окружности по центру и радиусу, треугольника, серединного перпендикуляра к отрезку и точки инверсной относительно заданной окружности) и 11 неевклидовых инструментов (построение неевклидовой точки, неевклидова отрезка, неевклидова луча, неевклидовой прямой, неевклидовой окружности по трем точкам, неевклидовой окружности по центру и радиусу, неевклидова треугольника, неевклидова серединного перпендикуляра к неевклидову отрезку, точки, являющейся образом при отображении относительно некоторой неевклидовой прямой, эквидистанты и орицикла).
Объектно-ориентированная концепция языка Java наиболее удачно нашла свое применение именно при разработке графических инструментов. Каждый инструмент представляет собой отдельный Java-class. Наиболее простые инструменты (такие как евклидова прямая, евклидова окружность, неевклидова прямая) являются базовыми и остальные классы наследуют от них всю информацию, внося только некоторые изменения. К примеру, построение неевклидовой окружности по трем точкам отличается от построения соответствующей евклидовой окружности лишь алгоритмом нахождения неевклидова центра. Отсюда и программирование класса неевклидовой окружности, очевидно, сводится к наследованию кода построения евклидовой окружности с заменой алгоритма построения евклидова центра на алгоритм построения неевклидова центра.
С вычислительной точки зрения реализация данного набора из 20-ти инструментов задача хотя и трудоемкая, но не сложная: как уже упоминалось, все строимые объекты (и евклидовы и неевклидовы) в конечном итоге представляют из себя лишь некоторый набор из евклидовых объектов трех видов: отрезков, окружностей и дуг окружностей и, следовательно, все расчеты сводятся только к нахождению концов отрезков, концов дуг, центров окружностей и т.п. параметров, достаточных для построения данных объектов.
Сложности возникают лишь при построении дуг окружностей (окружностей) достаточно больших радиусов (таких, что их нельзя сохранить в переменной типа double). Многочисленные эксперименты подсказали, что алгоритм построения дуги окружности, три точки (A, B, C) которой удовлетворяют соотношению d(AB,C)<1 (т.е. евклидово расстояние между прямой проходящей через две точки дуги до третьей точки меньше одного пикселя) можно заменять алгоритмом построения отрезка, проходящего через концы дуги.
При вводе пользователем точек, определяющих некоторый объект, возможны ситуации некорректного ввода. Например, попытки построить евклидову окружность по трем точкам, лежащим на одной прямой, построение прямой по двум совпадающим точкам, построение неевклидова объекта по точкам, лежащим вне круга B2 и т.п. - это ситуации ведущие к сбоям в алгоритмах построений. В разработанной программе предусмотрена проверка на корректный ввод точек, которая автоматически не дает возможности пользователю ввести неверную информацию.
В рамках данного проекта не было цели создания достаточно большого количества инструментов - скорее решалась проблема оптимизации инструментария, т.е. создания минимального набора инструмента наиболее удобного в практических построениях. Автору кажется, что в данной работе найден компромисс между количеством разработанных инструментов и возможностями программы: фактически любой не реализованный в проекте инструмент (например, касательная к окружности или перпендикуляр к отрезку, проходящий через данную точку) может быть построен с помощью евклидовой прямой и окружности и при этом вспомогательные построения в любой момент могут быть скрыты.
|