10.6. ДУГИ ОКРУЖНОСТЕЙ
Теперь займемся некоторыми задачами, связанными с воспроизведением кривых. В следующем разделе будут обсуждены проблемы, порождаемые дискретностью данных. Здесь рассмотрим одну специфическую задачу, которая часто возникает в прикладных задачах машинной графики: отыскание дуги окружности с заданным радиусом
соединяющей две заданные точки с координатами
(точка
). Для этого необходимо найти координаты центра соответствующей окружности и затем выбрать подходящую дугу из четырех возможных вариантов. В первую очередь следует определить координаты точки
расположенной посередине прямой
соединяющей две концевые точки:
Введем полуразности координат:
Центр окружности лежит на нормали к прямой
проходящей через ее среднюю точку. Если
имеет нулевое значение (прямая
— вертикаль), то значение координаты
центра окружности определяется следующим образом.
а координата
центра окружности может принимать одно из двух значений:
Если прямая
не вертикальна, то для определения координат центра окружности требуется затратить несколько больше усилий. Во-первых, определяется угловой коэффициент прямой
(рис. 10.7)
и, во-вторых, — квадрат расстояния
между центром окружности и средней точкой:
Если полученное значение
оказывается отрицательным, то, следовательно, заданный радиус слишком мал и потому диаметр соответствующей окружности меньше расстояния между точками. Если оно равно нулю, то центр окружности совпадает со средней
Рис. 10.7 Иллюстрация к процедуре определения и некоторой дуги окружности с заданным радиусом, соединяющей две точки. Сегмент
обозначает линию
упоминаемую в тексте.
точкой. В остальных случаях координаты центра могут принимать значения из двух следующих множеств:
Выражения, содержащие и, представляют собой синус и косинус угла
(см. рис. 10.7). (Вспомните о существовании тригонометрических тождеств, определяющих синус и косинус угла через его тангенс)
Уравнения (10.34) предусматривают вычисление большего, чем необходимо, числа квадратных корней. Подстановка в них значения
из уравнения (10.33) и значения и из уравнения (10.32) дает следующее:
На рис. 10.7 изображены два центра окружностей. Поскольку каждому центру соответствуют также две допустимые дуги, то в общем случае задача соединения двух точек дугой с заданным радиусом имеет четыре решения. Даже если зафиксировать направление — по или против часовой стрелки, то еще остаются два решения. Предпочтение обычно отдается более короткой из двух дуг. (Если
равно нулю, то длина обеих дуг, естественно, одинакова.) Если ввести разности координат
то можно определить значения углов относительно оси х линий, соединяющих центр с каждой концевой точкой соответственно (обозначения см. на рис. 10.7).
Здесь арктангенс принимает значение
Если разность
— положительна (как на рис. 10.7 для нижнего центра А), то длина дуги, проведенной от первой точки ко второй по часовой стрелке, равна
Если эта разность отрицательна (как на рис. 10.7 для верхнего центра В), то длина дуги, проведенной
от первой точки ко второй против часовой стрелки, равна
Приведенные формулы позволяют выбирать кратчайшую дугу с заданным направлением.
Иногда мы располагаем третьей точкой
и требуется выбрать дугу, проходящую ближе всех остальных к этой точке. Используя ее координаты
можно вычислить ее расстояние от обоих центров и выбрать тот центр, расстояние до которого ближе всего к значению радиуса. Если точка
расположена с той же стороны прямой
что и центр выбранной окружности, то следует выбирать большую из двух дуг, в противном случае следует выбирать меньшую. Это решение может основываться на определении проекции сегмента
на прямую
обозначает центр окружности —А или В на рис. 10.7).
Лемма 10.1. Пусть на плоскости заданы три точки —
и и М, и
— взятая с соответствующим знаком разность координат к точек К и
аналогичным образом определены разности координат
В таком случае длина проекции сегмента
на сегмент
равна сумме
деленной на длину сегмента
Эта лемма легко доказывается с помощью простых геометрических построений. В нашем случае лемму можно непосредственно использовать, считая точкой К точку
точкой
— центр выбранной окружности и точкой М — центр второй окружности. Поскольку длина проекции сравнивается с половиной расстояния между центрами, деление на длину можно опустить (см. задачу 10.10).
Пример 10.4. Необходимо провести дугу радиусом 10 из начала координат (0,0) в точку (5,5) таким образом, чтобы она проходила вблизи точки (3,4). Находим, что
. В таком случае использование уравнения (10.34) приводит к получению
кандидатами на роль центров дуги являются точки с координатами (8,115; — 4,155) и
Расстояние третьей точки от первой точки-кандидата составляет 9,59, а от второй — 8,76. Значение первой ближе к значению радиуса (10), и поэтому в качестве центра выбирается точка с координатами (8,115; — 4,115). Использование уравнения (10.36) дает
По таблице значений тригонометрических функций (или с помощью калькулятора) определяются углы
рад и
рад; таким образом, длина дуги с направлением по часовой стрелке равна
Очевидно, что дуга с направлением по часовой стрелке короче дуги с направлением против часовой стрелки, поскольку длина соответствующей окружности равна 31,4. Числитель выражения, определяемого леммой 10.1, равен
Так как это значение меньше удвоенного значения расстояния
следует выбирать более длинную из двух дуг. Итак, искомая дуга должна быть проведена по часовой стрелке.