Касание

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

Таблица 1 - Пары кривых, поддерживаемых ограничением касания

Прямая

Окружность

Эллипс

Сплайн

Параметрическая кривая

Прямая

+

+

+

+

Окружность

+

+

+

+

+

Эллипс

+

+

+

Сплайн

+

+

+

+

Параметрическая кривая

+

+

newline

Выбор варианта касания. На рис.1 изображены два примера касания для пар окружность-окружность и окружность-прямая. Штриховой линией изображены окружности с альтернативным вариантом касания. Рисунок наглядно показывает, что любое касание может иметь два решения. Например, окружности могут касаться, оставаясь снаружи друг друга, либо одна внутри другой; в другом примере, на рис.2 справа показано, что при касании прямой и окружности возможны два варианта их взаимного размещения, «слева» и «справа» от прямой.

../../../../_images/S.3.10.1.png

Рис. 1

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

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

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

../../../../_images/S.3.10.2.png

Рис. 2

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

Создание ограничения касания. Ограничение касания задается вызовом метода

constraint_item GCE_AddTangent(GCE_system gSys, geom_item g[2], var_item tPar[2]).

Входными параметрами метода являются:

  • gSys – система ограничений параметричеcкого эскиза;

  • g[2] – дескрипторы двух кривых;

  • tPar[2] – дескрипторы переменных, вспомогательные параметры касания для первой и второй кривой.

Функция возвращает дескриптор нового ограничения касания, созданного для данной пары кривых. Значения вспомогательных параметров tPar[0], tPar[1] принимаются во внимание только, если соответственно первая или вторая кривая является сплайном или параметрической кривой. Для аналитических кривых (прямая, окружность, эллипс) следует передать пустой дескриптор GCE_NULL_V. Например, в tPar можно передать массив {GCE_NULL_V,GCE_NULL_V}, если обе кривые аналитические. Если касание задается для сплайна или параметрической кривой, то для ограничения заводится вспомогательная переменная с помощью вызова GCE_AddVariable. Начальное значение переменной будет указывать на предполагаемую точку касания в параметрической области кривой. Надо заметить, что любая переменная, как и геометрические объекты, является предметом вычислений, поэтому её значение будет обновляться при всех вычислительных запросах решателя (GCE_Evaluate, см. параграф Вычисление системы ограничений ), т.е. фактически решатель будет отслеживать актуальное значение параметра касания. Если для сплайна или параметрической кривой tPar[idx] = GCE_NULL_V, то локализация точки касания будет выполнена автоматически, по принципу близости к начальному положению объектов.