Квант
Разное

Школьная ЭВМ рисует окружность

Щёголев А. Г.

56

Школьная ЭВМ рисует окружность

А. Г. ШЕГОЛЕВ

В предыдущего номере «Кванта» мы немного расскаазали о графических возможностях школьной ЭВМ «Ямаха» (и языка MSX — Бейсик), нарисовали красивые картины — вернее, составили алгоритмы, выполняющие эти рисунки. В этот раз мы продемонстрируем графические возможности машин们 при решении геометрических задач на построение. Мы ограничимся разбором лишь одной задачи, но разбор этот будет очень подробным; он основан на принципах систематического программирования (см. «Квант», 1987, № 10, 11). Итак, задача: проведите окружность через три точки, заданные свойства координат.

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

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

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

Через эти точки нельзя проводить окружность (и при этом единственно!)!

Рис. 1.

57

Постановка:
Дано: (x1,y1)(x_1, y_1) — координаты точек A,B,CA, B, C.
Требе: σ\sigma — изобравнение окружности (или ее части, находящейся в пределах экрана).
При: A,B,CA, B, C не лежат на одной прямой.
Связь: A∈σ,B∈σ,C∈σA \in \sigma, B \in \sigma, C \in \sigma.

Сценарий:
На рисунке 1 в синее кругочки сведены переменные элементы будущего диалога — конкретные числа, сообщаемые человеком в ответ на запрос ЭВМ. В фигуры скобки заключены два варианта ЭВМ: первый будет видан в случае, если точки с данными координатами лежат на одной прямой, второй — если координаты точек удовлетворяют постановке; в этом последнем случае на экране будет изобравнения точки A,B,CA, B, C с заданным координатами и проходит через них окружность.

Метод:
Условие того, что три данные точки A,BA, B и CC лежат на одной прямой, равносильно колlinearности векторов AB→\overrightarrow{AB} и BC→\overrightarrow{BC} (рис. 2) и имеет вид
(x2−x1)(y3−y2)=(y2−y1)(x3−x2).(x_2 - x_1)(y_3 - y_2) = (y_2 - y_1)(x_3 - x_2).
Уражение 1. Убедитесь в том, что это условие охватывает и случаи, когда любые две (и даже все три) точки совпадают.
Для того чтобы изобравить окружность, мы должны сообщить исполнитель (школьной ЭВМ) координаты ее центра и радиус.
Как известно, центр SS описанной окружности может быть найден как точка пересечения середины перепределкиров к двум сторонам треугольника (AB(AB и BCBC на рисунке 3).
координаты векторов:
AB→=(x2−x1,y2−y1),\overrightarrow{AB} = (x_2 - x_1, y_2 - y_1),
BC→=(x3−x2,y3−y2);\overrightarrow{BC} = (x_3 - x_2, y_3 - y_2);
MM — середина стороны ABAB — имеет координаты
(x1+x22,y1+y22);(\frac{x_1 + x_2}{2}, \frac{y_1 + y_2}{2});
координаты точки NN — середины

стороны BCBC
(x2+x32,y2+y32).(\frac{x_2 + x_3}{2}, \frac{y_2 + y_3}{2}).

Любая точка, лежащая на прямой MSMS, имеет координаты (Mx+λmx,My+λmy)(M_x + \lambda m_x, M_y + \lambda m_y), где MxM_x и MyM_y — соответствен абсциза и ordinata точки MM; mx=y2−y1m_x = y_2 - y_1 и my=x2−x1m_y = x_2 - x_1 — координаты вектора mm; λ\lambda — некоторое число.
Уражение 2. Докажите, что m⃗⊥AB→\vec{m} \perp \overrightarrow{AB}.
координаты точек на прямой NSNS выражаются аналогично через параметр μ\mu, координаты точки NN и вектора, перпендикулярного к BC→\overrightarrow{BC} (например вектора n=(y3−y2,x2−x3)n = (y_3 - y_2, x_2 - x_3)). Для нахождения точки пересечения прямых MSMS и NSNS приравняем соответствующие координаты:
{Mx+λmx=Nx+μnx,My+λmy=Ny+μny.\begin{cases} M_x + \lambda m_x = N_x + \mu n_x, \\ M_y + \lambda m_y = N_y + \mu n_y. \end{cases}

Решая эту систему линейных уравнений относительно неизвестных λ\lambda и μ\mu, получим, например, выражение для λ\lambda:
λ=12(y3−y2)(y3−y1)−(x2−x3)(x3−x1)(y2−y1)(x3−x2)−(x2−x1)(y3−y2).\lambda = \frac{1}{2} \frac{(y_3 - y_2)(y_3 - y_1) - (x_2 - x_3)(x_3 - x_1)}{(y_2 - y_1)(x_3 - x_2) - (x_2 - x_1)(y_3 - y_2)}.
координаты центра окружности
Sx=Mx+λmx=x1+x22+λ(y2−y1),S_x = M_x + \lambda m_x = \frac{x_1 + x_2}{2} + \lambda (y_2 - y_1),
Sy=My+λmy=y1+y22+λ(x1−x2).S_y = M_y + \lambda m_y = \frac{y_1 + y_2}{2} + \lambda (x_1 - x_2).
Радиус obtuisется по теореме Пифагора как расстояние между центром и любой из данных точек (напри-

58

метр AA):

r=(Sx−x1)2+(Sy−y1)2.r = \sqrt{(S_x - x_1)^2 + (S_y - y_1)^2}.

Теперь, располагая сценарием и методом вычисления, построим алгоритм и переведем его на MSX — BASIC. Используем вспомогательный алгоритм «изображение» (GOSUB 200 — это обращение к соответствующей подпрограмме).

Алгоритм:

алг окружность
нач
вывод «Построим окружность», «проходящий через три точки.»
запрос «Координаты первой точки»; x1,y1x_1, y_1
запрос «Координаты второй точки»; x2,y2x_2, y_2
запрос «Координаты третьей точки»; x3,y3x_3, y_3

если (x2−x1)(y3−y2)=(y2−y1)(x3−x2)(x_2 - x_1)(y_3 - y_2) = (y_2 - y_1)(x_3 - x_2)
то вывод «Через эти точки нельзя» «провести окружность» «(и притом единственную)!»

инчете изображение
все
кон

алг изображение
нач
графика
точка (x1,y1)(x_1, y_1), розовый
точка (x2,y2)(x_2, y_2), розовый
точка (x3,y3)(x_3, y_3), розовый

λ:=12(y3−y2)(y3−y1)−(x2−x3)(x3−x1)(y2−y1)(x3−x2)−(x2−x1)(y3−y2)\lambda := \frac{1}{2} \frac{(y_3 - y_2)(y_3 - y_1) - (x_2 - x_3)(x_3 - x_1)}{(y_2 - y_1)(x_3 - x_2) - (x_2 - x_1)(y_3 - y_2)}

Sx:=x1+x22+λ(y2−y1)S_x := \frac{x_1 + x_2}{2} + \lambda(y_2 - y_1)

Sy:=y1+y22+λ(x1−x2)S_y := \frac{y_1 + y_2}{2} + \lambda(x_1 - x_2)

r:=(Sx−x1)2+(Sy−y1)2r := \sqrt{(S_x - x_1)^2 + (S_y - y_1)^2}

окружн (Sx,Sy)(S_x, S_y), rr, розовый
кон

Программа:

10’ окружность