Система автоматизации конструирования проекционных геометрических моделей «Симплекс»

Предлагаемая статья ставит своей целью познакомить читателя с основными идеями, положенными в основу системы геометрического моделирования Симплекс. Данная система предназначена для автоматизации труда специалистов, чей труд связан с выполнением разнообразных построений и расчетов, обусловленных геометрической природой моделируемых объектов или явлений.

На протяжении многих столетий в математике параллельно развивались два ее основных направления — аналитическое и синтетическое (геометрическая). В различные исторические эпохи неоднократно имело место попеременное теоретическое и практическое преобладание синтетики и аналитики друг над другом.

В настоящее время наблюдается существенный перевес сил в пользу методов аналитической математики. В начале XX века эта область знаний получила серьезное инструментальное подкрепление в виде механических вычислительных устройств, а с середины века - электронных вычислительных машин. Сопоставление числа с состоянием триггеров в электронном устройстве открыло перед аналитической математикой широкие возможности внедрения своих теорий и методов в практическую деятельность человека.

Совершенствование схемотехники вычислительных устройств в контексте обработки числовой информации достигло высокого технологического уровня, чем оказало существенное влияние на развитие аналитической математики как науки. В то же самое время геометрия попрежнему осталась с традиционными инструментальными средствами - бумагой, карандашом, линейкой и циркулем.

Обладая неоспоримым преимуществом перед числом и формулой - наглядностью результата, геометрические методы в традиционном исполнении не обеспечивают ни точности, ни быстроты счета, ни снижения трудоемкости расчетно-графических работ.

Отсутствие надлежащих инструментальных средств в геометрии непроизвольно приводит к мысли о превосходстве аналитических методов над геометрическими. Отсюда возникает невольное стремление решать задачи даже с явно геометрической природой, методами, основанными на обработке числа (особенно большие усилия в этом смысле были затрачены учеными мира на совершенствование аналитических методов, предназначенных для представления формы поверхностей - задачи особенно важной в условиях автоматизированного производства в машиностроении). Замена геометрии как инструмента научного исследования аналитическим эквивалентом все чаще сводит ее роль к роли обычного черчения.

В окружающем нас мире существует необозримое множество реальных явлений и процессов, поддающихся научному анализу и доступных для количественных измерений. В той же степени существует множество реальных явлений и процессов, поддающихся научному анализу с точки зрения формы, положения и структуры [1].

Это означает, что информация об этих процессах и явлениях обладает универсальным характером и может служить основой для построения универсальных моделей. Целесообразность использования той или иной модели определяется постановкой задачи и уровнем развития математических теорий, способных эту задачу решить. Но возникшая диспропорция в развитии ветвей математики не может не сказываться на проблемах применения математических моделей на практике.

Возможно, большинство специалистов в той или иной степени связанных с процессами моделирования сегодня предпочитают применять для решения своих задач аналитические методы. Прежде всего, эта тенденция связана с соответствующим уровнем полученного математического образования. Однако практика показывает, что задачи, сформулированные в простых геометрических терминах, далеко не всегда получают столь же простой аналитический эквивалент. Кроме того, если задача предполагает получение результата в геометрической форме, то преобразование геометрия - аналитика - геометрия становится достаточно сложным и, вообще говоря, не нужным. Различные аспекты математического моделирования, в том числе геометрического, очень подробно освещены в работе [1].

Проблема практического применения этих моделей, прежде всего, состоит в отсутствии современных технических средств, предназначенных для их воплощения, а также в недооценке информационной сущности этих моделей.

В основу разрабатываемой системы геометрического моделирования заложено понимание любого геометрического построения как универсального преобразователя информации или, иными словами, геометрической машины. В данном контексте открывается полноценная возможность использования ЭВМ не только в качестве «числовой», но в том числе и в качестве «геометрической» машины безотносительно к реальной природе протекающих в ней физических процессов.

Такая концепция, позволяющая отказаться от числовой интерпретации задач, может быть весьма полезна специалистам различных областей. Геометрическое моделирование свойственно таким видам деятельности как проектирование, дизайн, деловая графика, обработка результатов экспериментов. И, конечно же, сама математика как инструмент научного познания не может развиваться без использования геометрических моделей.

Перед тем как сформулировать требования к системе реализации геометрических моделей, подытожим вышесказанное:

  1. уровень развития инструментальных средств геометрического моделирования не соответствует современным требованиям к практическому использованию математических моделей, вследствие этого геометрические модели часто остаются вне поля зрения специалистов и не востребуются ими;
  2. геометрическое образование отстает по своему уровню и качеству от аналитического: специалисты не готовы воспринять или использовать геометрическую модель как расчетный инструмент;
  3. выполнение геометрических построений воспринимается человеком как рутинная работа;
  4. существующий аппарат геометрического моделирования разрабатывался без учета требований системного подхода; необходимую для работы геометрическую модель трудно найти и применить в виду отсутствия классификаций и стандартизации средств представления моделей;
  5. все перечисленные выше причины прямо или косвенно оказывают влияние на отставание развитие геометрической теории в сравнении с аналитической компонентой математики.

Требования к системе

Разрабатывая теоретические аспекты проекционного геометрического моделирования, авторы ставили своей целью создание специализированного программного продукта, который бы позволил в первую очередь снять инструментальные ограничения, присущие геометрическому методу решения задач.

Качества, отличающие данную систему от иных систем геометрического моделирования, определяются следующими положениями, принятыми при ее разработке:

  1. Основное назначение системы - обеспечивать автоматизированное выполнение геометрических построений, рассматривая этот процесс как программирование, а не черчение;
  2. Геометрическое построение, выполненное как последовательность взаимосвязанных действий, рассматривается как алгоритм или геометрическая машина, способная осуществлять преобразование сигналов, подаваемых на ее вход в выходные сигналы.
  3. Система, предназначенная для использования специалистами в области геометрии, построена с учетом применяемого ими понятийного и терминологического аппарата.
  4. Любое построение в системе рассматривается как фактологическая структура - набор сведений об элементарных отношениях между символизированными геометрическими объектами, устанавливающих в совокупности много-связные отношения между этими объектами.
  5. Система соответствует принципам визуального программирования, при котором декларативная программа создается посредством воздействия на графические интерпретации объектов системы.
  6. Система, предназначенная для синтеза геометрических моделей, обладает средствами формирования произ-водных геометрических понятий, что позволяет неограниченно расширять ее объектный состав, предписывать им индивидуальные геометрические свойства и проявления в отношении других объектов.
  7. Проектирование объектов и алгоритмов в системе возможно на основе принципов объектно-ориентированного подхода.
  8. Графический эквивалент построения, дополненный перечнем отношений между представленными в нем объектами, составляют совокупный выходной документ системы.
  9. Система обладает специальными сервисными средствами, облегчающими выполнение и отладку сложных геометрических проектов.

Перечисленные выше положения послужили основным отправным моментом в разработке системы Симплекс, более подробная характеристика которой будет дана ниже в данной статье.

В настоящее время система Симплекс 2.03 функционирует в среде графических оболочек WINDOWS 3.1 и WINDOWS 95 и является некоммерческим программным продуктом.

Основные требования к вычислительной системе - не менее 8 Мбайт ОЗУ, 4 Мбайт свободного дискового пространства.

Авторам известна коммерческая разработка фирмы Key Curriculum Press, носящая название Sketchpad™, которая в своей идеологической основе ближе всего соответствует системе Симплекс 2.03.

Несмотря на определенное совпадение в подходах авторов к проблемам геометрического моделирования, в системах имеются существенные различия, кратко характеризуемые пунктами 4, 6, 7. Заинтересованные читатели могут обратиться за дополнительной информацией о системе Sketchpad™ в Интернет по адресу: http://www.keypress.com/product_info/sketchpad3.html.

Окна реализации алгоритмов

Любые геометрические построения, выполняемые в системе Симплекс, осуществляются в т.н. окнах реализации алгоритмов (рис. 1). Каждое такое окно отображает отдельный документ - чертеж геометрического построения. Одновременно система может работать с множеством документов, каждому из которых сопоставляется отдельное окно. Все окна реализации алгоритмов являются дочерними окнами главного окна системы Симплекс (рис. 2) и находятся под управлением т.н. многодокументного оконного интерфейса Windows - MDI.

Рис.1

Связь с системой осуществляется посредством меню и палитр командных кнопок, с помощью которых пользователь посылает команды окнам реализации алгоритмов. Получая команды от пользователя, система выполняет расчеты и выводит в окна изображения построенных геометрических объектов. Геометрическое построение выполняется в декартовой системе координат, связанной с окном.

Рис. 2

Область чертежа, ограниченную пределами окна, можно перемещать в произвольных направлениях и масштабировать.

Объекты-примитивы

С точки зрения системы объект - это некоторая совокупность взаимосвязанных данных, с помощью которых можно выразить свойства моделируемого геометрического понятия и отличать один экземпляр объекта от другого. Совокупные значения таких данных называются значением объекта.

Объекты рассматриваются в контексте многосвязных отношений, регламентирующих способы получения значений одних объектов на основе значений других.

Предъявление отношения системе предписывает ее исполняющему процедурному аппарату рассчитать соответствующую отношению функцию с целью получения значений выходных объектов отношения из входных. Функция выполняется специальной решающей процедурой Симплекса.

Совокупность отношений, устанавливающих связь между объектами, называется алгоритмом или построением, а последовательность действий решающей процедуры, приводящей к получению значений всех объявленных в отношениях алгоритма объектов, называется его программой.

Симплекс строит программу на основе вводимых пользователем отношений, автоматически отслеживая связи между объектами, поэтому порядок, в котором отношения поступают в систему и порядок их расчета в программе в общем случае различны.

Объекты, структура и свойства которых предопределены внутри системы и не могут быть изменены пользователем извне, называются объектами-примитивами. В системе Симплекс реализованы следующие типы примитивов:

  • величина,
  • точка,
  • прямая линия,
  • вектор,
  • окружность,
  • коника (кривая второго порядка),
  • контур,
  • размерная линия,
  • шкала,
  • бинарное поле и
  • NIL-объект.
  • Объекты - примитивы могут служить компонентами объектов сложных типов, которые пользователь может конструировать самостоятельно для выражения специальных геометрических понятий.

    Часто на практике геометр вынужден строить множества объектов, которые получают свои значения в результате выполнения однотипных действий, производимых над общими для них всех исходными объектами. Такие объекты имеют единое происхождение (хотя, возможно, различный тип) и объединяются по этому признаку в обобщающие конструкции - списки. Доступ к списку объектов в системе осуществляется посредством списочных переменных.

    Примитив величина применяется для представления числовых значений. Величина предназначена для хранения комплексных чисел, то есть ее значение имеет вещественную и мнимую части.Величина считается вещественной, если ее мнимая часть точно равна нулю, в противном случае она рассматривается как комплекснозначная. В Симплексе величина используется, как правило, для выражения каких-либо метрических, порядковых или структурных характеристик геометрических объектов. Система имеет функцию занесения чисел в величину "Ввести число", которая позволяет задавать различные значения объектам величина путем ручного ввода числовых констант.

    Примитив точка служит для представления в системе точки расширенной декартовой и/или комплексной плоскостей. Точка характеризуется двумя комплекснозначными координатами X и Y, а также имеет третью однородную координату W для представления несобственных точек плоскости. Точка является действительной в том случае, если обе ее координаты X и Y — действительные числа. Если хотя бы одна из координат имеет не равную нулю мнимую часть, то такая точка является точкой комплексной плоскости. Важной характеристикой точки является степень свободы. Точка обладает двумя степенями свободы, если обе ее координаты сформированы из числовых констант. На такую точку можно воздействовать интерактивно. Она может быть перемещена при помощи манипулятора «мышь» в произвольное место плоскости. У точки, имеющей только одну степень свободы, одна из координат зависит от числовой константы, вторая же координата зависима от переменной или какой-либо списочной конструкции языка системы. Такая точка может перемещаться по экрану «мышью» под влиянием ограничений, накладываемых функциональной зависимостью одной из «несвободных» координат. Обе координаты точки с отсутствием степеней свободы зависят от других объектов. Такая точка жестко связана функциональной связью и не может быть захвачена «мышью» и куда-либо перемещена. Точка изображается на экране в виде маркера - небольшого кружка, квадрата или иных специальных символов, некоторые визуальные характеристики которых (размер, цвет и т.п.) пользователь может регулировать по своему усмотрению.

    Примитив прямая применяется для выражения в Симплексе таких геометрических понятий, как отрезок (ограниченная прямая), прямая линия, луч, бесконечная прямая с исключенным отрезком (неограниченные прямые). В настоящей версии Симплекса представлены только вещественные прямые. Прямые подразделяются по признаку происхождения на образованные с помощью двух точек, одной точкой и без точек. Происхождение прямой всецело зависит от вида отношения, которое ее создает. Объект прямая несет в себе информацию об инцидентных ему точках. Прямой предписывается инцидентная точка в том случае, если в построении выполнена какая-либо операция, приводящая к появлению точки, принадлежащей этой прямой. Инцидентные точки образуются как в момент порождения прямой (например, если прямая проходит через эти точки), так и на этапе применения прямой в качестве входного параметра отношения (когда прямая способна образовывать точки, инцидентные ей). Прямая является ориентированным объектом. Ее ориентация также обуславливается видом порождающего отношения. Прямая может в определенных случаях вырождаться в т.н. Null - прямую (например, проведение прямой через две совпавшие точки). В этом случае ориентация прямой считается неопределенной. Визуальное представление прямой - ограниченные отрезки, расположенные в области экрана или пересекающие его границы.

    Объект вектор представляет собой особую форму направленного отрезка. Вектор, так же как и прямая, рассматривается только в вещественной плоскости. Вектор имеет начало и конец, отображается на экране в виде отрезка со стрелкой на конце, указывающей его ориентацию. Стрелка не чертится лишь в том случае, если начало и конец вектора совпадают, т.е. вектор является нулевым.

    Объект окружность предназначен для представления в системе таких геометрических понятий, как окружность (неограниченная линия) и дуга окружности (ограниченная линия). В отличие от прямой линии окружность не имеет эквивалента лучу прямой. Внутри системы окружность представляется координатами точки центра Xc, Yc и величиной радиуса. Принято считать, что при положительной величине радиуса окружность ориентирована против часовой стрелки, при отрицательной - радиус окружности равен абсолютному значению, а ее ориентация направлена по часовой стрелке. При равенстве радиуса нулю окружность приобретает статус Null-окружности и не имеет ориентации.

    Объект коника предназначен для моделирования кривых второго порядка. Система считает конику заданной, если известны пять точек, которым она инцидентна. Коника является неограниченной линией и может существовать в качестве одной из модификаций: окружность, эллипс, парабола, гипербола и пара прямых.

    Объект контур является составным примитивом, звеньями (компонентами) которого служат отрезки прямых линий и дуги окружностей. Для существования контура необходимо, чтобы его смежные звенья стыковались друг с другом в узлах контура. При совпадении начального и конечного узлов контур считается замкнутым, в противном случае контур разомкнут.

    Логическая величина применяется для представления результатов вычисления логических выражений и используется как средство обусловленного расчета значений объектов. Логическая величина может принимать два значения: истина - true и ложь - false. В Симплексе имеется специальное отношение "Ввод условий", которое позволяет осуществить ручное задание значения логической величине с помощью логических констант true и false. Также как и числовая величина, логическая величина является неотображаемым объектом.

    Примитив размерная линия используется для определения и отображения размерных характеристик геометрических объектов. Он служит одновременно двум целям: обеспечивает оформление построения как чертежа, а также позволяет контролировать размерные характеристиками в процессе интерактивного воздействия на построение.

    Шкала - это объект Симплекса, предназначенный для представления функциональных зависимостей в виде сложных кривых линий с числовыми пометками. Шкала может интерпретироваться как след от движения продуцирующей точки, функционально зависящей от числового параметра. При задании шкалы указывается ссылка на такую точку, параметр, от которого эта точка зависит, и вводятся две величины, характеризующие пределы изменения значений параметра (начальное и конечное). В момент создания шкалы система анализирует зависимость точки от параметра и обнаруживает в алгоритме все отношения, необходимые для построения этой точки. В результате такого анализа в шкале создается ее собственный внутренний алгоритм и в него помещается копия выделенных в исходном построении отношений. «Зная» алгоритм собственного получения, шкала может «предъявлять» его для различных вычислительных целей и процедур отображения. Каждой точке шкалы соответствует параметрическое число, равное значению параметра положения этой точки на шкале. Вычерчивание шкалы сопровождается нанесением штрихов, которые строятся с автоматически выбираемым переменным шагом на основе специальных эвристик. Возле штриха надписывается значение параметрического числа шкалы.

    Бинарное поле - это объект-примитив системы Симплекс, предназначенный для выражения сложной функциональной зависимости между точкой и двумя величинами (параметрами). Визуально бинарное поле представляется как два семейства кривых линий, снабженных числовыми пометками. Каждая линия семейства представляет собой след от движения продуцирующей точки, функционально зависящей от одного числового параметра, при фиксированном другом. Семейство - это совокупность линий, соответствующих различным значениям фиксированного параметра из указанного диапазона значений. При задании бинарного поля указывается ссылка на продуцирующую точку, два параметра, от которых эта точка зависит и две пары величин - предельных значений изменения параметров (начальных и конечных). Подобно шкале, бинарное поле «хранит» в себе способ своего построения и поэтому обладает системными свойствами, аналогичными свойствам шкалы. При выполнении геометрических построений возможны случаи их вырождения. Попытка расчета некоторого отношения, на основе поступивших в него значений входных объектов, может закончиться неудачей, в результате чего выходные объекты не получают значения. В системе Симплекс принимается, что в таких случаях выходные объекты получают значения неопределенного объекта. Значение такого объекта (и, собственно, он сам) обозначается специальным зарезервированным словом nil и может указываться в качестве константы при заполнении полей запросов наряду с обычными константами и списочными переменными.

    NIL - объект может быть использован в качестве входных параметров отношений наряду с другими объектами системы. В подавляющем большинстве отношений, реализованных в системе, NIL - объект на входе отношения порождает NIL объект на его выходе.

    Списочные переменные

    Обращение к объектам, формируемым в процессе работы системы, осуществляется через списочные переменные. Переменная как бы представляет собой контейнер, в который помещаются данные об одном объекте или об упорядоченной совокупности объектов. В общем случае эта совокупность не обязательно должна быть однородной. Количество элементов одной списочной переменной может достигать 16000, чего более чем достаточно для большинства практических задач. Каждая переменная должна быть названа уникальным именем.

    Имя может состоять из произвольного количества алфавитно-цифровых знаков английского и русского алфавитов, первый символ не должен быть цифрой. Прописные и строчные символы различаются. Важно понимать, что имена в Симплексе присваиваются не объектам, а их совокупностям - спискам, выраженным списочными переменными. Имя переменной можно условно отождествить с именем объекта лишь в том случае, если в переменной содержится лишь единственный объект.

    Любая списочная переменная образуется как выходной параметр специальной функции системы - запроса, устанавливающего отношение между объектами. Практически списочная переменная вводится в алгоритм во время формирования выходных параметров отношения в запросе во время заполнения пользователем полей специальных диалоговых панелей. В рамках одного алгоритма может существовать лишь единственная списочная переменная с заданным именем.

    Это означает, что при попытке ввода нового отношения, среди выходных параметров которого будет указана переменная с именем, уже назначенным ранее другим отношением, система обнаружит противоречие в отношениях. Такое противоречие должно быть разрешено пользователем либо в пользу старого, либо в пользу нового отношения.

    В первом случае, осуществляется отказ от ввода нового отношения и тогда программа остается прежней.

    Во втором случае, старое отношение в программе, в котором обнаружена совпавшая по имени переменная, удаляется из программы и вместо него в действие вступает новое отношение.

    Как уже отмечалось выше, имена списочных переменных не являются эквивалентом имен геометрических объектов. Однако в большинстве случаев списочная переменная объединяет в себе однородные геометрические объекты, сформированные одним отношением.

    Поскольку, как правило, функция, реализующая отношение, передает в переменную объекты конкретного типа, имеет смысл именовать такую переменную, отражая в ее названии тип формируемых объектов.

    Симплекс позволяет автоматически генерировать имена списочных переменных с учетом этого требования.

    Проект и алгоритмы

    Сформулированную в геометрических терминах задачу, решаемую с привлечением системы Симплекс, будем называть проектом Симплекса. Проект заключает в себе отдельные логически-завершенные части, называемые алгоритмами, и регулирует их взаимодействие.

    В течение сеанса работы в Симплексе может быть открыто не более одного проекта. Проекту присваивается имя, которое совпадает с именем файла, в котором проект сохраняется на носителе информации. Файл содержит в себе информацию, необходимую для функционирования как отдельных частей проекта, так и всего проекта в целом.

    Структурно любой проект состоит из одного или нескольких алгоритмов (построений). Каждый алгоритм имеет уникальное имя, которое назначается пользователем в момент его создания.

    Главный алгоритм проекта, который объявляется при открытии каждого нового проекта, имеет предопределенное имя "Main".

    Алгоритм объединяет в себе отношения между геометрическими объектами, относящимися к какому-либо отдельному геометрическому построению. Такие объекты и отношения считаются принадлежащими этому алгоритму. Как уже указывалось выше, порядок поступления отношений в алгоритм во время его создания (программирование алгоритма) не регламентирован и может быть произвольным. Система самостоятельно распознает, каким образом организована взаимосвязь всех его отношений, и на основе этого анализа формирует программу, регламентирующую порядок расчета значений объектов.

    При вводе новых или изменении имеющихся отношений программа переформировывается, и система приступает к расчету значений объектов, исходя из нового состояния взаимосвязей и вида отношений алгоритма. Система следит за всеми явными и косвенными связями, которые могут устанавливаться между отдельными алгоритмами проекта.

    В том случае, если такая связь обнаруживается, то процедуре перерасчета значений будут подвергнуты объекты и тех алгоритмов, которые находятся во взаимосвязи с алгоритмом, отношения в котором изменились.

    Ввод программы и исполнение проекта

    Под программированием геометрической задачи в системе Симплекс понимается ее выражение в виде совокупности отношений, связывающих геометрические объекты, в терминах которых она сформулирована. Целью программирования является создание геометрической модели, выраженной на языке системы Симплекс и способной служить средством расчета значений всех связанных в ней объектов в ответ на любые принудительные изменения значений ее входных параметров.

    Рис. 3

    Выражение задачи в Симплексе осуществляется путем последовательного ввода в систему сведений об элементарных (неделимых) функциональных связях между объектами (рис. 3 - рис. 5), то есть отношениями между ними.

    Симплекс оснащен набором наиболее употребительных в практике плоского проекционного геометрического моделирования функций, которые пользователь может применять для выражения связей между объектами различной геометрической природы. Кроме того, система позволяет геометру самостоятельно создавать сложные функции на основе простых, отлаживать их, подключать к системе и впоследствии использовать в качестве элементарных, не вдаваясь в подробности их внутренней реализации.

    Рис. 4

    Модульный подход к решению сложных геометрических задач подразумевает наличие в системе программирования средств блочного выражения геометрических построений и организации взаимосвязи между ними.

    По этой причине проект или, иными словами, глобальная геометрическая задача подразделяется на совокупность отдельных алгоритмов - законченных построений. Алгоритмы являются приемниками вводимых пользователем отношений, которые обычно подаются в систему посредством диалоговых панелей запросов. Каждое введенное отношение направляется в один из указанных для него алгоритмов проекта.

    Рис. 5

    Использование такого способа выражения построения, при котором указывается функциональная взаимосвязь его отдельных объектов, позволяет не придерживаться какой-либо жесткой последовательности при вводе отношений в алгоритмы.

    Система способна самостоятельно обнаруживать причинно-следственные связи, обеспечивающие получение объектами своих значений и приводящие в итоге к решению поставленной задачи. Такой подход позволяет пользователю уделять большее внимание природе многосвязных отношений, возникающих между объектами геометрических моделей, оперативно воздействовать на них через графический интерфейс, и не заботиться о ведении протокола своих действий, расположении отношений в нем.

    Программирование задач в Симплексе в отличие от языков программирования общетехнического назначения является визуально-графическим и декларативным, что обусловлено спецификой предметной области, для которой предназначена эта система.

    Совокупность отношений, помещаемая в алгоритм Сим-плекса, не является в полном смысле программой, предписывающей системе строгий порядок выполнения действий для достижения результата, а лишь представляет исходный материал для нее.

    Для того чтобы она превратилась в программу, система должна "выстроить" последовательность отношений таким образом, чтобы каждый объект алгоритма смог бы получить значение на основе значений всех своих предков, которые в свою очередь должны получить свои значения раньше его.

    Сформированная таким образом последовательность отношений будет представлять собой программу Симплекса, поскольку позволит специальной решающей процедуре системы выполнить требуемое построение в соответствии с четко предписанной последовательностью действий.

    При вводе каждого нового отношения система выполняет процедуру поиска его "места" среди остальных отношений алгоритма, переформировывая программу, после чего рассчитывает новые значения объектов всего проекта, исходя из изменений, произошедших в алгоритме. Аналогичным образом система реагирует на любые изменения уже имеющихся в алгоритме отношений и на удаление отношений из него.

    Подводя итог, выделим в процессе исполнения проекта три основные фазы.

    В первой фазе пользователь вводит в систему отношение, выражающее функциональную зависимость некоторых объектов.

    Во второй - система приступает к генерации программы из имеющихся у нее на данный момент отношений.

    В третьей фазе система рассчитывает новые значения объектов всех алгоритмов, которые затронуло изменение одного из них, согласно полученной программе.

    Затем она отображает объекты в окнах реализации алгоритмов и переходит в режим ожидания поступления нового отношения.

    Процедура генерации программы из отношений

    При практической реализации системы оказалось возможным объединить вторую и третью фазу в рамках единой процедуры. Рассмотрим в общих чертах, каким образом система строит и исполняет программу проекта.

    Приступая к расчету, система, прежде всего, лишает все объекты, которые были рассчитаны на предыдущем шаге исполнения проекта, своих значений и считает с этого момента все отношения алгоритма невыполненными.

    Отношение будем называть выполненным, если на основе значений его входных объектов система сумеет рассчитать значения всех выходных объектов. В противном случае отношение считается невыполненным.Значение специального флага Success (успех) регистрации факта выполнения хотя бы одного отношения устанавливается в false.

    Система начинает последовательный просмотр и анализ отношений алгоритма. Если в результате анализа очередного невыполненного отношения система обнаруживает, что оно может быть выполнено, так как все его входные объекты обладают значениями, то она находит значения всех выходных объектов, помечает данное отношение как выполненное и устанавливает флаг Success в true.

    Истинное значение этого флага свидетельствует о том, что система рассчитала значения некоторых объектов алгоритма, которые, возможно, позволят выполнить и другие отношения, в том числе те, которые система уже проанализировала и пропустила. Если, закончив перебор всех отношений алгоритма, система имеет установленный в значение true флаг Success, то она обязана перевести его в состояние false и приступить к просмотру отношений с самого начала.

    Естественно, при очередном просмотре система анализирует только оставшиеся невыполненные отношения алгоритма. Процесс будет повторяться циклически до тех пор, пока система будет получать во флаге Success значение true. Настанет такой момент, когда выполняя очередной анализ отношений, система не сможет выполнить более ни одного из них. Флаг Success останется в значении false.

    Возможно, что некоторые отношения так и останутся невыполненными. Это означает, что система не смогла получить даже неопределенные значения объектов в их входных параметрах, поскольку среди отношений не нашлось ни одного, объявляющего такие объекты. Завершая процедуру исполнения проекта, система обновит содержимое окон реализаций алгоритмов, объекты которых изменили свои значения.

    Здесь мы рассмотрели процесс исполнения проекта в предположении, что изменение в алгоритме, связанное с вводом отношения, затрагивает только один алгоритм. Если проект построен таким образом, что некоторые его алгоритмы используются как составные части других, то система выявит иерархию их взаимозависимости и выполнит перерасчет значений объектов согласно вышеизложенным принципам для тех алгоритмов, которые это изменение затрагивает.

    Редактирование программы

    В процессе создания или использования геометрического построения в системе Симплекс возникает необходимость изменения вида отношений и реорганизации связей между объектами.

    В том случае, если в алгоритм вводится отношение, порождающее объекты, которые уже были объявлены в нем другими отношениями, возникает конфликт отношений. Напомним, что Симплекс не допускает наличие в алгоритме более одного отношения, объявляющего одну и ту же списочную переменную. Именно поэтому, прежде чем осуществить вставку отношения в алгоритм, система проверяет, существуют ли в алгоритме отношения, объявляющие те же списочные переменные, что и вводимое.

    В том случае, если вставляемое отношение не противопоставляется ни одному отношению алгоритма, то оно безусловно добавляется к ним. Система строит новую программу и рассчитывает ее. Если же конфликт отношений обнаружен, то система информирует пользователя о возникшем противоречии и ждет его разрешения.

    На основании информации, представленном в диалоговом окне "Подтверждение ввода отношения", пользователь имеет возможность проследить, какие из отношений алгоритма вступили в конфликт с введенным отношением. В том случае, если принимается решение заменить конфликтные отношения алгоритма на вводимое, то все старые отношения будут удалены из него, после чего их место займет новое отношение.

    Удаление отношений сопровождается разрывом связей между объектами. Это означает, что потомки объектов, лишенных порождающих отношений, теряют свои значения и их изображения не появляются в окне реализации алгоритма. Вводимое отношение должно восстановить разрушенные связи таким образом, чтобы объекты снова получили значения.

    В том случае, если отношение заменяется на однотипное, и имена списочных переменных, объявляемых в заменяемом и замененном отношениях одинаковы, вероятность получения определенных значений объектами достаточно высока.

    Если же отношение заменило собой не однотипное отношение, то возможна ситуация, при которой не все списочные переменные замененного отношения получат эквивалент в заменяющем. В данном случае некоторая часть объектов алгоритма может остаться без предков, что влечет за собой потерю значений этими объектами и исчезновение их изображений в окне алгоритма.

    Запросы

    Запросы - основное средство формирования программы на языке Симплекс. Под запросами понимаются специализированные диалоговые панели (рис. 6) для ввода отношений между объектами алгоритма, выраженных синтаксически и семантически корректными конструкциями языка Симплекс. Запросы призваны обеспечить пользователю максимальное удобство при составлении программы. Все запросы подразделяются по признаку количества входных и выходных параметров формируемых отношений и могут быть статически-определенными и динамически-определенными.

    К статически-определенным относятся запросы, количество входных и выходных параметров которых фиксировано. Панели статически-определенных запросов в большинстве своем соответствуют стандартному функциональному набору Симплекса.

    В динамически-определенных запросах количество входных и выходных параметров может быть переменным и заранее неизвестным. К динамическим запросам относятся запросы для формирования отношений итерационной процедуры, вызова функций, определенных пользователем, и вызова методов комплексных объектов.

    Рис. 6

    Каждая диалоговая панель запроса подразделяется на четыре смысловые зоны:

  • Зона формирования полей выходных параметров;
  • Зона формирования полей входных параметров;
  • Зона назначения вида согласования входных параметров;
  • Кнопки управления вводом отношения.
  • Рассмотрим более подробно назначение каждой из них.

    Зона полей, предназначенных для формирования выходных параметров отношений, составлена из совокупности комбинированных списков. Возле каждого из них расположена подпись-подсказка, поясняющая смысловое назначение данного параметра отношения. Данные поля заполняются пользователем (или автоматически) именами списочных переменных, созда-ваемых вводимым отношением.

    Обычно рядом с каждым из комбинированных списков находятся флажки-переключатели: NIL - указывающий на необходимость учета в списочной переменной объектов с неопределенным значением и CMP - указывающий на необходимость учета объектов с комплекснозначными значениями. Флажки около списков могут и отсутствовать, что определяется конкретным видом формируемого отношения.

    Зона полей, предназначенных для задания входных параметров отношения, представлена обыкновенными блоками редактирования. Они также снабженными подписями, поясняющими назначение каждого параметра. Пользователь вводит (или специальным образом передает) в эти поля имена списочных переменных или иные конструкции языка.

    Ниже находится зона переключателей согласования параметров. Она состоит из блока кнопок с зависимой фиксацией, позволяющих назначить отношению один из предопределенных видов согласования параметров. Количество кнопок и их функции зависят от вида конкретного отношения. Для описания сложных видов согласования параметров предназначен специальный блок редактирования, в котором пользователь описывает согласующую функцию.

    В самой нижней части панели запроса находятся кнопки управления вводом. Кнопка "Тест" предназначена для ввода в алгоритм отношения из запроса с заполненными полями, при этом система исполняет проект с учетом этого отношения и отображает обновленный вид построений проекта в окнах реализации алгоритма. Содержание полей запроса не изменяется. В данном режиме пользователь может оценить действие введенного отношения и при необходимости внести в него коррективы.

    Напротив, кнопка "Ввод" предназначена для окончательного ввода отношения и подготовки запроса к формированию следующего отношения. Проект исполняется, а выходные поля запроса автоматически заполняются именами новых списочных переменных, а входные поля - очищаются.

    Таким образом, процесс создания программы на языке Симплекс сводится к последовательному вызову диалоговых панелей запросов, корректному заполнению всех его полей, установлению согласования параметров, завершению формирования отношения путем нажатия кнопок Тест или Ввод, а также разрешению противоречий, возникающих между новыми и уже введенными отношениями.

    Иные средства редактирования

    Геометрический алгоритм, реализованный в системе, вероятно, был бы не интересен и мало практически полезен, если мог использоваться только с параметрами, на основе которых был создан в процессе визуального проектирования.

    Разумеется, система Симплекс позволяет не только проектировать такие алгоритмы, но и использовать их как средства выполнения вычислений, задавая параметрам различные значения. Любая операция, устанавливающая те или иные значения объектов алгоритма, состоит в преобразовании или замене отношений, объявляющих эти объекты.

    В Симплексе помимо системы запросов предусмотрен еще один вид воздействия на структуру программы, называемый динамическим редактированием алгоритма. Его сущность заключается в интерактивном воздействии с помощью манипулятора «мышь» на графический эквивалент объекта на экране монитора. Объект, указанный «мышью», идентифицируется по своему изображению, и система выявляет отношение, с помощью которого он был создан.

    Перемещение курсора мыши по экрану можно рассматривать как движение некоторой точки в системе координат связанной с алгоритмом. Рассматривая такую точку в некоторой функциональной связи (природа которой для каждого вида отношений заслуживает отдельного обсуждения) с указанным объектом, система корректирует входные параметры отношения при любых изменениях в положении манипулятора.

    Такая динамическая коррекция может сопровождаться немедленным перерасчетом всех отношений, находящихся в зависимости от редактируемого, и отображением получаемых объектов в окне алгоритма.

    Пользователь получает возможность не только целенаправленного изменения вида и структуры геометрического построения, но и способность исследования поведения алгоритма.

    В настоящее время Симплекс может осуществлять обратное преобразование для ограниченного набора отношений. Расширение их перечня - важнейшее направление развития системы.

    Операции с буфером Clipboard

    Большинство Windows-приложений могут осуществлять динамический обмен данными посредством так называемого буфера Clipboard. Такое взаимодействие программ позволяет существенно расширить возможности обработки данных, использовать преимущества специализированных приложений и не перегружать разрабатываемые системы полезными, но не свойственными для них функциями.

    Кроме того, буфер Clipboard может быть использован как временное хранилище информации в рамках отдельной Windows-программы. Данные, передаваемые в буфер, и извлекаемые из него могут быть организованы в достаточно сложные структуры, требования к которым продиктованы спецификой программ, обменивающихся информацией.

    Для того чтобы различать эти структуры, данным приписываются форматы, то есть правила, регламентирующие способы использования данных, передаваемых через Clipboard.

    Существуют стандартные форматы, которые определены в самой среде Windows. Однако многие программы в процессе работы создают и регистрируют в Windows свои собственные форматы для обмена данными, характерными только для них. Программы могут обмениваться данными через буфер Clipboard только в том случае, если в них предусмотрена обработка соответствующих форматов, зарегистрированных в Windows.

    Симплекс также имеет средства передачи через буфер Clipboard специализированных данных - совокупностей отношений, регистрируя для их обработки в Windows специальный формат.

    Симплекс может заполнять Clipboard отношениями, выделяя их как некоторые подмножества из проекта-источника, а также вставлять содержимое буфера в проект-приемник того же самого или иного проекта. Операции с буфером Clipboard являются еще одним средством редактирования проекта на уровне обмена алгоритмами и их частями, а также комплексными объектами, которые будут рассмотрены ниже.

    Отладка геометрических алгоритмов

    Визуальный способ создания программ на языке Симплекса обуславливает ряд специфических требований к их отладке. Прежде всего, рассмотрим, при каких обстоятельствах возникает необходимость в отладке.

    При изначальном формировании алгоритма, его отладка совмещена с процессом создания. Каждое новое введенное отношение сопровождается перерасчетом отношений алгоритмов проекта и результат в графической форме представляется на экране. Таким образом, пользователь может оценивать реакцию системы на любые осуществляемые им действия.

    Как правило, создавая алгоритм, пользователь достаточно свободно ориентируется в нем и геометрическое построение, отображаемое на экране, служит «удовлетворительным» визуальным эквивалентом программы. На этом этапе необходим лишь небольшой набор средств автоматизации отладки алгоритма. Наиболее употребительными являются:

  • поиск отношения, породившего объект, по его изображению;
  • ведение протокола программы и протокола значений объектов.
  • По мере усложнения построения количество графических объектов возрастает, усложняется их взаимосвязь, экран становится насыщенным изображениями объектов. Способность человека различать объекты даже одного построения ухудшается. Ситуация усугубляется тем, что любое функционально-смысловое геометрическое построение, как правило, сопряжено с выполнением ряда вспомогательных элементарных построений, необходимых, но малоинформативных.

    В определенной степени возникающую проблему удается решить с помощью таких средств отладки как:

    смысловое разнесение объектов по слоям визуализации (в этом случае графические изображения вспомогательных построений не закрывают собою существенные детали основного построения);

  • использование графических атрибутов объектов (цвет и т.п.);
  • ведение протокола функциональной структуры построения;
  • выявление причинно-следственных взаимосвязей отношений;
  • сегментация алгоритма на подалгоритмы и т.п.
  • Выполнение построения средствами Симплекса неизбежно связано с появлением алгоритмических ошибок. Их поиск, локализация и устранение необходимы для правильного решения задачи. С этой проблемой тесно связана проблема изучения существующего алгоритма.

    В большинстве случаев поиск ошибок в алгоритме связан с его структурным анализом. Программирование задачи в отношениях между объектами, опережающий ввод отношений на этапе создания алгоритма представляют собой достаточно удобное средство, поскольку позволяют не заботиться о расположении отношения в общей программе.

    Однако совокупность отношений, записанная в произвольном порядке, хотя и является основой для автоматического получения программы, не пригодна для структурного анализа человеком. Система Симплекс имеет возможность автоматически выявлять ход решения задачи и предоставлять протокол отношений, организованных в соответственную последовательность.

    Анализ алгоритма в данном случае существенно упрощается, так как порядок выполнения построения, отраженный в нем, является естественным. Существенной «помощью» при изучении алгоритма служат комментарии к объектам, в которые при разработке алгоритма рекомендуется заносить сопроводительную информацию и пояснительные сведения о геометрической природе объектов.

    Симплекс является компьютерным инструментальным средством разработчика геометрического алгоритма. Его применение может оказать большое влияние на развитие новых теоретических разработок в области геометрического моделирования.

    Система позволяет снять инструментальные ограничения, присущие традиционному способу геометрического исследования, протоколирует и документирует ход построений. Одним из важных моментов в процессе создания еще не сложившейся теории является испытание алгоритмов-образцов при различных исходных условиях. Здесь уместно отметить, что графический результат, получаемый в результате испытаний одного и того же алгоритма, может изменяться до неузнаваемости.

    Поиск алгоритмических ошибок (если, конечно, они имеются) в таких условиях представляет особенно серьезную проблему. Симплекс имеет специальные средства, позволяющие производить сопоставление объектов алгоритмов при различных исходных данных, даже в том случае, если в некоторых отношениях происходит морфирование объектов (трансформация одних типов объектов в другие).

    Отлаживая в целом работоспособный алгоритм, пользователь может создавать его копию и модифицировать ее. В случае вырождения построения в алгоритме-копии или получения в ней неверного результата, возможно сопоставление копии с «легко узнаваемым» оригиналом. При этом поиск причин, приводящих к ошибке, возможен в терминах оригинала.

    Наконец, необходимо отметить, что функциональный набор Симплекса развивается на основе алгоритмов, в нем разработанных и отлаженных. Для этого Симплекс имеет возможность конвертировать алгоритм в эквивалентную ему программу на языке Object Pascal, на котором написан сам.

    Такая программа, оттранслированная в среде Delphi, может быть достаточно легко интегрирована в систему Симплекс в качестве нового встроенного отношения.

    Согласование параметров

    Выше уже неоднократно говорилось о том, что система Симплекс работает не с отдельными объектами, а с их совокупностями, доступ к которым осуществляется через списочные переменные.

    Списочная переменная заполняется объектами в процессе исполнения отношения. Входными аргументами любых отношений также являются списки, причем количество таких аргументов может быть различным (в общем случае от нуля и более).

    Каждый объект, рассчитываемый в процессе реализации отношения, является продуктом выборки конкретных входных параметров. От того, каким будет порядок следования таких выборок, в конечном счете, зависят как порядок следования объектов в выходных списочных переменных, так и их значения.

    Процесс, устанавливающий порядок выборок входных параметров отношения и их взаимодействие в процессе исполнения отношения, называется согласованием параметров отношения.

    В Симплексе используются различные способы согласования параметров, многие из которых (часто используемые) унифицированы и предопределены в панелях запросов. Вместе с тем пользователь может создавать сложные функции согласования самостоятельно, используя конструкции языка согласования.

    Согласование на примере отношений с двумя входными аргументами

    Рассмотрим некоторые виды согласования на примере взаимодействия двух списков.

    Пусть имеются два списка A и B. Под простым согласованием элементов этих списков будем понимать такую совокупность выборок пар элементов из A и B, при которой каждому элементу последовательно выбранному элементу ai соответствует bi.

    Поскольку в общем случае количество элементов в списках A и B может быть не одинаковым, определим минимальное значение n из количеств элементов этих списков и будем образовывать пары лишь на множестве индексов i, не превышающих этого значения.

    В результате выполнения отношения над входными параметрами A и B будет образован список C, в котором образуется ровно n элементов (рис. 7). Назовем такой вид согласования простым. Иными словами, при простом согласовании каждый элемент множества C образуется из отдельной пары элементов A и B, причем ни один из использованных элементов A и B повторно уже не используется.

    Рис. 7

    Пусть на множествах координат x и y требуется построить множество точек. Рассмотрим, каким будет результат в зависимости от вида использованного согласования параметров в операции. Точка задана координатами. На рис. 8 представлен результат решения задачи в случае простого согласования.

    Поскольку список координат y содержит всего три элемента, список точек p1, будет содержать три точки.

    Рис. 8

    При множественном согласовании списков A и B каждый элемент из множества A образует пары со всеми элементами множества B (рис. 9).

    Рис. 9

    Если количество элементов множества A равно m, а количество элементов множества B равно n, то количество образуемых элементов множества C равно произведению m на n.

    При множественном согласовании важно рассмотреть один частный случай, когда либо m, либо n равно единице. В этом случае выходной объект образуется как результат отношения элементов списка друг к другу вида "один ко многим" или "много к одному". Вообще говоря, место объекта в списке C зависит также от того, какой из списков A и B был взят первым, а какой вторым

    Рис. 10

    В качестве примера использования множественного согласования рассмотрим прежнюю задачу. Последовательность образования элементов списка p1 такова, что сначала для первого элемента из списка x (x1) перебираются все элементы списка y: (y1, y2, y3) и образуются точки p11, p12 и p13.

    На следующем этапе выбирается элемент x2 и процесс повторяется для y1, y2 и y3 с образованием точек p14, p15 и p16. Так продолжается до тех пор, пока все элементы из x не будут исчерпаны (рис. 10). Сдвиговое согласование характеризуется таким способом образования пар, при котором каждая очередная пара образована совокупностями (aibi+1): i=1, ..., min(m,n)-1 (рис. 11).

    Рис. 11

    Важный частный случай такого согласования имеет место, когда в качестве обоих списков используется один и тот же список, то есть образуются пары вида (aiаi+1). Под обратным сдвиговым будем понимать согласование пар вида (ai+1bi). Сдвиговое согласование наиболее удобно применять в тех случаях, когда необходимо выполнить построение на основании смещенного порядка исходных аргументов. Такое построение обладает т.н. "интегрирующим" эффектом. Пример построения списка отрезков на последовательности точек p1 приведен на рис. 12.

    Рис. 12

    Помимо рассмотренных элементарных видов согласования, Симплекс обладает рядом других, рассмотрение которых выходит за рамки данной статьи.

    Проектирование комплексных объектов

    Симплекс предоставляет пользователю возможность самостоятельно создавать комплексные объекты на основе объектов-примитивов. Конструируя комплексные объекты, пользователь может выражать сложные геометрические понятия и создавать геометрические модели с заданными свойствами, применяя при этом специальную терминологию, характерную для предметной области решаемой задачи.

    Комплексный геометрический объект - это специальный способ организации доступа к нескольким более простым объектам - составляющим комплексного объекта, при котором все они воспринимаются и используются как единое целое.

    Также как и любой объект-примитив Симплекса, комплексный объект характеризуется своим значением, выражающимся совокупностью значений всех составляющих его объектов (полей), и способностью вступать в отношения с другими объектами - перечнем реализуемых им отношений в форме т.н. методов объекта (алгоритмов, присущих только объектам).

    Для того чтобы создать объект и использовать его в проекте для решения задачи, необходимо выполнить следующие действия:

    1. Выполнить регистрацию объекта. Любой новый объект подлежит регистрации в проекте. Она заключается в указании типа объекта, перечислении его полей и методов. Тип объекта указывается однократно. Состав полей и методов объекта могут подвергаться изменениям в процессе работы над проектом.
    2. Установить связь методов с окнами их реализации. С каждым методом объекта на этапе его проектирования связывается окно реализации алгоритма. Окно служит интерфейсным средством программирования методов. На этапе исполнения проекта с использованием разработанных методов наличие этих окон не обязательно.
    3. Осуществить программирование методов. Любой алгоритм есть совокупность отношений между объектами. Совокупная цепочка отношений выделяет в алгоритме объекты, которые являются независимыми по отношению к другим объектам (естественные входные параметры алгоритма) и объекты, от которых не зависят другие объекты (естественные выходные параметры алгоритма). Программирование метода заключается в установлении многосвязных отношений между входными, выходными параметрами метода и полями объекта.
    4. Описать отношение, реализуемое методом. Этот этап связан с указанием, какие из объектов метода следует понимать как входные и выходные параметры (их можно назначить отличными от естественных параметров), присвоением названий параметрам, поясняющих их предназначение и указанием названия отношения, реализуемого методом. Этот этап обеспечивает корректное автоматическое формирование запроса, представляющего в системе данное отношение.
    5. Вызвать запрос для решения поставленной задачи. Этот этап служит для практического использования спроектированного отношения на базе метода объекта.

    Для создания комплексного объекта, необходимо, прежде всего, указать, каким способом организована его внутренняя структура, предназначенная для выражения значения объекта (поля), а также перечислить способы проявления объекта (методы) по отношению к другим объектам, используемым в проекте. Такое описание безотносительно к содержанию полей и методов будем называть описанием типа объекта (рис. 13).

    Оно необходимо для того, чтобы предоставить системе необходимую служебную информацию для обслуживания объектов (хранение, предоставление значений объектов и т.п.), без которой невозможно начать их проектирование. После описания типа объекта, его название подключается как пункт меню системы "Объекты".

    В дальнейшем этот пункт послужит родоначальником дочернего меню, в котором будут собраны названия отношений, реализованных методами объекта.

    Рис. 13

    Поля объекта свойственны каждому его экземпляру. Отсутствие значения у какого-либо поля объекта влечет за собой неопределенность значения комплексного объекта в целом. Комплексный объект, как и объект-примитив, может устанавливать многосвязные отношения с другими объектами, свойственные его природе. Каждому такому отношению сопоставляется отдельный алгоритм, называемый методом комплексного объекта (рис. 14).

    Рис. 14

    Методы устанавливают сложную функциональную связь между полями объекта и другими объектами. Связь с методом, выраженная в форме отношения, поддерживается через входные и выходные параметры метода. Методы объекта не могут рассматриваться в отрыве от него, поскольку они тесно связаны с полями этого объекта.

    Различают две стадии существования методов в системе Симплекс. На стадии проектирования метода как алгоритма поля объекта являются собственностью этого метода. Это значит, что в момент проектирования, поле объекта может рассматриваться как обыкновенный объект-примитив, имеющий то же самое имя, что и соответственное поле объекта, указанное при описании его типа.

    Такой примитив вступает в предписываемые программой метода отношения или же получает в результате их исполнения конкретные значения. Наличие значения у компонента - заменителя поля на стадии проектирования предоставляет возможность интерактивного доступа к объектам метода, благодаря их визуализации. По сути метод как бы является алгоритмом-образцом, специально настроенная копия которого будет использована при его вызове в проекте на этапе исполнения. Метод вступает в стадию исполнения, если соответствующее ему отношение было вызвано из какого-либо алгоритма или метода.

    Как уже было сказано выше, Симплекс, прежде всего, создает копию вызываемого метода, для того чтобы не разрушить метод-образец. Комплексный объект, передаваемый в метод-копию через входные параметры, замещает в нем значениями своих полей значения, соответственных по именам списочных переменных. Происходит т.н. "навязывание" значений переменным и эти переменные в методе получают статус рассчитанных (т.е. отношения, которые порождали их в методе-копии, исполняться не будут).

    "Навязывание" обусловливает расчет объектов в методе-копии, исходя из значений произведенной подмены. Иными словами, расчет значений объектов в методе на стадии исполнения осуществляется под управлением значения объекта, поступившего в него через входной параметр. Результаты расчета извлекаются из метода-копии через выходные параметры.

    Если в качестве выходного параметра используется комплексный объект, то его поля принимают в себя значения из совпадающих с ними по именам списочных переменных метода Поскольку любой метод предназначен для воплощения в виде отношения, после программирования он нуждается в соответственной настройке.

    Пользователь должен указать, какие из его объектов сопоставляются с входными и выходными параметрами отношения, дать им названия, сформировать название отношения. Настроенное таким образом отношение служит шаблоном для автоматического формирования диалоговой панели запроса, вызывающего и передающего в программу данное отношение (рис. 15).

    Рис. 15

    Применение комплексных объектов и их методов при решении задач целесообразно, прежде всего, по следующим причинам:

  • Пользователь имеет возможность применять понятийный аппарат и терминологию, свойственные для конкретной решаемой задачи. При этом нет необходимости в искусственном «дроблении» понятий на элементарные составляющие. Нет необходимости в детальном понимании работы отношений, продуцирующих комплексные объекты.
  • Пользователь может применять объекты, разработанные заранее вне данной задачи, в том числе импортировать объекты из библиотек объектов. В том случае, если каких-либо методов объекта при реше-нии задачи недостаточно, их можно разработать и подключить к существующим методам объекта. При этом внутренняя структура существующих методов не затрагивается. Расширяя понятийный аппарат, пользователь может строить более сложные комплексные объекты из более простых, создавать новые объекты и организовывать их в пользовательские библиотеки объектов. Эти объекты можно будет использовать многократно в других задачах без необходимости повторной разработки.
  • Примеры

    Завершая краткую характеристику системы, приведем несколько простых примеров, не требующих от читателя каких-либо специальных знаний в области геометрии.

    Выполним конструирование узора (рис. 16) применявшегося в турецкой архитектуре для украшения оконных и дверных проемов. Его изображение заимствовано из примера, сопровождающего систему геометрического моделирования Sketchpad™ фирмы Key Curriculum Press (http://www.keypress.com/product_info/sketchpad3.html).

    Алгоритм выполненного в Симплексе, реализован авторами самостоятельно.

    Рис. 16

    Внимательный анализ показывает, что узор состоит из множества однотипных линий, которые в дальнейшем будем называть куполами. Купола как бы «насажены» своими крайними точками на большие (внешние) и малые (внутренние) четырехугольники некоторого каркасного построения. Смежные большие и смежные малые четырехугольники касаются друг друга вершинами так, что образуют своими сторонами, инцидентными точкам касания, правильные пятиугольники. В приведенном изображении большие и малые четырехугольники являются квадратами.

    Выполняя построение узора, будем также считать внешние четырехугольники квадратами, малым четырехугольникам припишем несколько иной для того, чтобы разнообразить узор, возникающий при изменении параметров исходной программы.

    Приступим к созданию узора.

    Вначале выразим средствами Симплекса отдельную и единственную кривую - купол (рис. 17). Сначала зададим две точки p1 и p2, которые впоследствии будут управлять формой купола в результате «насаживания» на реперные точки каркасного построения (вершины сторон четырехугольников).

    Точки p1 и p2 можно задать совершенно произвольно. Лишь только для наглядности построения принимаем их Y - координаты одинаковыми.

    Для формирования равнобедренного треугольника, на котором будут построены сопрягающие дуги купола, проведем из точек p1 и p2 две прямые.

    Вершина p3 равнобедренного треугольника, образованного прямыми o1, o2 и o3 будет совпадать с вершиной купола. Точка <p3> есть пересечение прямых <o4> и <o2>.

    Рис. 17

    Теперь можно построить две недостающие стороны треугольника o5 и o6.

    В центре этих сторон отметим точки, которые зададут места плавного соединения дуг купола.

    Найдем расстояние, равное половине длины ребра треугольника. Величина <c1> есть расстояние между точками <p1> и <p7>.

    Полученным радиусом построим восемь дуг d1, d2, d3, d4, d5, d6, d7 и d8.

  • Окружности <d1> и <d2> заданы двумя точками <p7> и <p1> и радиусом <c1>;
  • Окружности <d3> и <d4> заданы двумя точками <p3> и <p7> и радиусом <c1>;
  • Окружности <d5> и <d6> заданы двумя точками <p3> и <p6> и радиусом <c1>;
  • Окружности <d7> и <d8> заданы двумя точками <p6> и <p2> и радиусом <c1>.
  • Завершив данное построение, мы получили возможность управлять формой и размерами кривых - куполов. Интересно заметить, что управление объектами алгоритма осуществляется только за счет смещения точек p1 и p2, которые позволяют и ориентировать купол на плоскости, и одновременно менять его размер.

    Выразим купол в виде комплексного объекта. В едином построении будем различать две разновидности купола.

    Теперь начнем новое построение (алгоритм), которое образует каркас (рис. 18) для размещения кривых - куполов.

    Прежде всего, укажем базовую точку построения - центр p1. Точка <p1> задана координатами <0> и <0>. Выполним построение множества точек p2, которые определят структуру правильного многоугольника в конструкции орнамента (в нашем случае пятиугольник).

    Точка <p2> задана относительно точки <p1> под углом <[90~450;72]> к оси OX на расстоянии <155.5>. Согласование параметров «множественное».

    Числовая константа 72 получена в результате деления 360 градусов на 5 - количество сторон многоугольника. При необходимости построить базовый многоугольник с иным количеством сторон, здесь необходимо указать число, получаемое по простой формуле 360/N, где N-количество сторон многоугольника. Если на месте числа 72 указать число, на которое 360 нацело не делится, то правильного замкнутого многоугольника не получится. Хотя соответственное построение может быть выполнено, изображение узора потеряет регулярный вид.

    Положение первой точки из множества p2 будет определяться величиной 90 градусов - углом, задающим направление на эту точку из центра p1. Множество отрезков o6 образуют стороны базового многоугольника. Прямая <o6> задана точками <p2> и <p2>. Согласование параметров «сдвиговое». Точки множества p3 строятся в серединах его сторон. Точка <p3> есть центр объекта <o6>.

    Рис. 18

    Теперь построим множество окружностей d1 с центрами в точках p3, проведенных через соответственные точки p2.

    Окружность <d1> задана центром <p3> и точкой <p2>. Данные окружности необходимы для построения «больших квадратов» с вершинами в точках p2, p7, p2 (со смещенным номером индекса), p6. На эти вершины будем «насаживать» внешние обрамляющие купола.

    Прежде чем построить множества точек p6 и p7, выполним построение прямых o7.

    Прямая <o7> проведена через точку <p3> под углом <90> к прямой <o6>. Согласование параметров «Mu(No(1,2),3)».

    В данном примере применено сложное согласование параметров Mu(No(1,2),3). Прямые o6 согласуются с точками p3 нормально, поскольку каждому элементу из o6 соответствует элемент из p3. Значение 90 градусов - единично.

    Согласованное множественным способом с совокупностью элементов (o6-p3) данное значение позволяет получить множество прямых o7, каждая из которых перпендикулярна соответственному отрезку o6 в его середине.

    Каждая прямая o7, пересекаясь с соответственной окружностью, порождает две точки, организованные во множества p6 и p7. Точки <p6> и <p7> есть пересечение прямой <o7> и окружности <d1>.

    Теперь мы имеем все необходимые точки в вершинах «больших квадратов», для того чтобы приступить к «насаживанию» на них куполов.

    Вызовем метод create для первого купола orn1. Установим соответствие множества точек p7 каркаса с точкой p1 построения купола, а множества точек p2 каркаса с точкой p2 построения купола:

    orn.create: orn1·<orn ; true p7·>p1 p2·>p2 Согласование параметров «согласованное».

    Второй купол orn2 должен быть посажен на точки p2 и p7, причем индекс p2 на единицу больше, чем у p7. Поэтому здесь применено обратное циклическое сдвиговое согласование. Последний купол этой серии «насаживается» на элементы p21 и p75. (При сдвиговом согласовании «насадить» купол на p26 нельзя, так как p7 содержит только 5 элементов!).

    orn.create: orn2·<orn true p2·>p1 p7·>p2 Согласование параметров «Bc(1,2)».

    Для семейства куполов orn3 применяется циклическое сдвиговое согласование над множествами точек p6 и p2.

    orn.create: orn3·<orn true p6·>p1 p2·>p2 Согласование параметров «Cs(1,2)».

    Для семейства куполов orn4 применяется «Согласованное» согласование.

    orn.create: orn4·<orn true p2·>p1 p6·>p2 Согласование параметров «согласованное».

    На данный момент все купола, расположенные на «больших четырехугольниках» заняли свои места, настроили размеры, форму и ориентацию.

    Теперь перейдем к расчету положения «малых четырехугольников», являющихся каркасом для семейства малых куполов орнамента. Для этого выполним следующие построения.

    Соединим лучами точку p1 с каждой точкой из p2. Прямая <o10> задана точками <p1> и <p2>. Согласование параметров «множественное».

    Построим дополнительный пятиугольник, соединив вершины куполов orn4 и orn3 следующим образом:

    Прямая <o22> задана точками <orn4.p3> и <orn3.p3>. Согласование параметров «циклическое сдвиговое». Найдем точки пересечения его смежных сторон.

    Точка <p19> есть пересечение прямых <o22> и <o22>. Согласование параметров «циклическое сдвиговое».

    Проведем по две стороны в каждом «большом четырехугольнике» o25 и o28.

    Построим его диагональ o26.

    Прямая <o26> задана точками <p7> и <p6>.

    Для того, чтобы найти одну вершину «малого четырехугольника» проведем прямую через p19 под углом 120 градусов к прямой o25.

    Прямая <o27> проведена через точку <p19> под углом <120> к прямой <o25>. Согласование параметров «Cs(1,Mu(2,3))».

    На пересечении диагонали «большого четырехугольника» и прямой o27 найдем первую вершину «малого четырехугольника». Точка <p21> есть пересечение прямых <o26> и <o27>.

    Для построения еще одной вершины четырехугольника p20 выполним:

    Прямая <o24> проведена через точку <p19> под углом <60> к прямой <o25>. Согласование параметров «Cs(1,Mu(2,3))».

    Точка <p20> есть пересечение прямых <p6> и <o24>.

    Нахождение остальных вершин p22 и p23 проводится по следующей схеме:

  • Прямая <o29> проведена через точку <p20> под углом <0> к прямой <o28>. Согласование параметров «Mu(No(1,2),3)».
  • Точка <p22> есть пересечение прямых <o29> и <o26>.
  • Прямая <o30> проведена через точку <p21> под углом <0> к прямой <o29>. Согласование параметров «Mu(No(1,2),3)».
  • Точка <p23> есть пересечение прямых <o30> и <o6>.
  • Для завершения построения орнамента остается «насадить» купола на полученные вершины «малых четырехугольников»:

  • orn.create: orn5·<orn true p23·>p1 p22·>p2. Согласование параметров «согласованное».
  • orn.create: orn6·<orn true p22·>p1 p20·>p2. Согласование параметров «согласованное».
  • orn.create: orn7·<orn true p20·>p1 p21·>p2. Согласование параметров «согласованное».
  • orn.create: orn8·<orn true p21·>p1 p23·>p2. Согласование параметров «согласованное».
  • Итак, построение выполнено. Мы получили узор, который в точности соответствует рис. 16.

    Попробуем теперь изменять параметры каркасного построения, для того чтобы получать иные формы запрограммированного узора.

    Если в отношении точка <p2> задана относительно точки <p1> под углом <[90~450;72]> к оси OX на расстоянии <155.5>. Согласование параметров «множественное» заменить величину 72 на 120 (заметим, нас интересует только отношение, а не его место в программе), то получим узор, изображенный на рис.19.

    Рис. 19

    В данном построении «внутренние четырехугольники» не могут быть построены, вследствие чего изображение лишено семейства «внутренних» куполов. При замене 72 на 90 получим структуру, изображенную на рис. 20.

    Рис. 20

    Здесь уже присутствуют оба семейства куполов: «внешнее» и «внутреннее». Однако за счет того, что внутренние четырехугольники не являются квадратами, «внутренние» купола образуют своеобразный петельный узор, нарушающий регулярность орнамента.

    Рис. 21

    На рис. 21 представлен результат работы алгоритма при замене полей в объекте «купол» с «синих» на «красные».

    Теперь... Отношение, определяющее множество точек p2, изменено и приняло следующий вид:

    Точка <p2> задана относительно точки <p1> под углом <[90~450;15]> к оси OX на расстоянии <179.5>. Согласование "Множественное".

    Построение «малых» четырехугольников здесь не рассматривается. В следующем примере (рис.22) рассмотрен алгоритм, предназначенный для нахождения точек пересечения прямой линии и кривой второго порядка.

    Рис. 22

    Именно этот алгоритм, разработанный средствами Симплекса, используется в качестве его стандартной функции для реализации отношения «Точки пересечения прямой и коники».

    Алгоритм выполнен с использованием теоретической базы проективной геометрии. Ниже приводится протокол этого построения.

    С использованием системы Симплекс были выполнены иллюстрации к работе Ю.Н.Кузьмиа «Мультипликативная геометрия треугольника», опубликованная в N1 за 1997 год данного сборника.

    Перспективы развития системы Симплекс и его проблемы.

    В настоящее время система Симплекс способна решать многие задачи, возникающие в практике конструктивного геометрического моделирования. Однако утверждать, что концепция системы окончательно устоялась и все проблемы, связанные с разработкой геометрических моделей в ней решены, было бы преждевременно.

    Система находится в постоянном развитии и совершенствовании. Основные направления ее разработки определяются общими положениями теории синтетического геометрического моделирования и проекционного геометрического моделирования, в частности.

    Ниже перечислены наиболее актуальные задачи, стоящие в настоящее время перед разработчиками системы:

  • Разработка и совершенствование функционального набора системы;
  • Совершенствование подсистем обслуживания несобственных объектов плоскости;
  • Расширение класса объектов, моделируемых средствами комплексной плоскости;
  • Реализация средств объектно-ориентированного проектирования комплексных геометрических объектов;
  • Совершенствование подсистемы динамического редактирования алгоритмов.
  • Разработка библиотек объектов для решения задач проективной геометрии и моделирования многомерных пространств.
  • Подлежат разработке и многие другие вопросы, не затронутые в рамках данной статьи.

    E-Mail: VOLOSH@POP.CONVEY.RU

    СПИСОК ЛИТЕРАТУРЫ

    1. Вальков К.И. Введение в теорию моделирования. Л..: Изд-во ЛИСИ, 1974. 151с.
    2. Волошинов В.А., Волошинов Д.В. Компьютерная геометрия. СПб: СПбГТУ, 1995. 140 с.