Составление машинных алгоритмов решения задач
ТеорияПростейший пример алгоритма — математическая формула, она указывает, над какими величинами и в какой последовательности необходимо выполнять арифметические операции для решения более сложных задач. Если при графическом методе процесс решения нельзя записать в виде формулы, то это можно сделать с помощью схемы счета, указывающей последовательность выполнения различных геометрических операций, реализуемых с помощью операторов, приведенных в табл. 10.
Установим алгоритм и запишем его в виде схемы счета, составленной из стандартных операторов для решения задачи по определению точки встречи прямой с плоскостью (рис. 324). Пусть заданы плоскость α (а || b) и пересекающая ее прямая m. Требуется найти точку К = m ∩ α.
Мы знаем, что для решения этой задачи необходимо прямую m заключить в плоскость γ; найти прямую пересечения плоскостей γ ∩ α = n; отметить проекцию точки К, в которой пересекаются одноименные проекции заданной прямой m и полученной линии пересечения n. Все необходимые построения приведены на рис. 324. Индексация арабскими цифрами указывает на последовательность определения точек.
В рассматриваемом случае схема счета, представляющая алгоритм решения задачи, записанный в символах стандартных операторов (табл. 10), примет вид
V1III2V3V4III5V6I7V8III9V10.
Выполнение двух операторов IIInVn+1 можно заменить одним оператором VIa *. Окончательно схема счета машинного алгоритма запишется
V1 VIa2 V3 VIa4 I5- V6 VIa7.
(1) (2) (3) (4) (K') (K") (5)
Арабские цифры и буквы в скобках указывают точку, обозначенную на чертеже, которая получается в результате выполнения оператора, под которым она поставлена.
Проследим, как будет изменяться схема счета, а следовательно, и алгоритм решения задачи в зависимости от взаимного расположения геометрических фигур как между собой, так и по отношению к плоскостям проекций.
Внесем изменение в эпюр, задающий исходные данные предыдущей задачи (см. рис. 324) так, чтобы горизонтальная проекция m' прямой m заняла положение, параллельное горизонтальным проекциям а' и Ь' прямых а и b (рис. 325).
В данном случае решить задачу так, как в предыдущем случае, не представляется возможным. Действительно, если мы заключим прямую m в горизонтально проецирующую плоскость γ, а затем будем определять с помощью оператора V точку 1, то сделать это нам не удастся, так как пересечение а" и b" произойдет в несобственной точке (а" ∩ b" = 1∞). По той же причине нельзя определить и точку 3. Не имея точек 1 и 3, мы не получим точек 2 и 4, а следовательно, нам не удастся найти проекцию n" прямой n. Но эта задача может быть решена по схеме счета (5), если решение начать с фронтальных проекций (см. рис. 325).
* Такая замена целесообразна, так как она уменьшает затраты машинного времени. На выполнение двух операторов III, V требуется 26 команд, оператор VIa реализуется с помощью только 11 команд.
Как следует из рис. 325, схема счета по формальным признакам ничем не отличается от предыдущей:
V VIa V VIa I V VIa.
(5) (6) (7) (8) (K') (K") (6)
Условимся считать этот путь вторым вариантом решения в отличие от первого варианта, описанного схемой счета (5).
Когда одна из заданных геометрических фигур (прямая или плоскость) занимает проецирующее положение, решение задачи представляется следующими схемами счета:
а) прямая — проецирующая, плоскость общего положения задана параллельными прямыми (рис. 326,а) :
VIб VIa VIб VIa I V VIa;
(9) (10) (11) (12) (K') (K") (7)
б) прямая — проецирующая, плоскость общего положения задана следами (рис. 326,6) :
VIб VIa II V
(13)(14) (K') (8)
в) плоскость — проецирующая, прямая общего положения (рис. 326, в) :
V VIa
(K')(K") (9)
Все многообразие случаев задания исходных данных задачи по определению точки встречи прямой с плоскостью может быть отнесено к семи альтернативным вариантам. Кроме схем счета (5), (6), (7), (8), (9) отметим еще:
V VIa II V VIa
(15)(16) (K")(K') (10)
(рис. 327,а)
VIб VIa VIб VIa
(17)(18) (K")(K') (11)
(рис. 327,6)
Приведенные примеры иллюстрируют изменение алгоритма решения одной и той же задачи в зависимости от характера расположения геометрических фигур.
Программирование решения многих задач является трудоемким процессом. Поэтому, чтобы каждый раз, когда машина приступает к решению задачи с другими исходными данными, не составлять новую программу (схему счета, которая является управляющей программой), следует создать единый (обобщенный) алгоритм, запрограммировав который получим программу, пригодную для решения всех вариантов данной задачи. Чтобы выяснить логическую схему построения обобщенного алгоритма, выпишем составленные ранее схемы счета частных алгоритмов в виде табл. 11.
Из табл. 11 (строка 1) видно, что если после выполнения оператора V1 точка пересечения найдена, то следует переходить к выполнению оператора VIa2, если и в этом случае точка определяется, то машина должна приступить к выполнению следующего оператора V3 и т. д., пока не будет выполнен оператор VIa7 , завершающий решение задачи.
Это решение соответствует исходным данным, показанным на рис. 324. Если при решении задачи по варианту I после выполнения оператора V6 точку не получили (случай, изображенный на рис. 326,а), то следует переходить к выполнению группы операторов VIб15 VIa16 VIa18 I19 V20 (табл. 11, строка 2). Если в результате выполнения оператора VIб17 новой точки не будет, то следует переходить к выполнению операторов II21 V22 (табл. 11, строка 3, рис. 326,6).
Таблица 11
Отсутствие новой точки после выполнения оператора VIa4 может служить указанием для перехода к выполнению операторов V23 VIa24 (табл. 11, строка 4, рис. 326,в). В том случае, когда не найдена новая точка после выполнения оператора V3, переходят к выполнению группы операторов V25 VIa26 II27 V28 VIIa29 (табл. 11, строка 5, рис. 327,а).
Если при выполнении оператора V1 точку не получили, переходят к выполнению варианта II решения (табл. 11, строка 6, рис. 325). И, наконец, если точку не получают при выполнении операторов V1 и V8, то необходимо переходить к выполнению участка подпрограммы, состоящего из операторов VIб30 VIa31 VIб32 VIa33 (табл. 11, строка 7, рис. 327,6).
Схемы счета для решения частных вариантов задачи, сведенные в табл. 11, могут быть объединены в одну схему счета, представляющую обобщенный алгоритм:
Для наглядности и выявления структуры построения обобщенного алгоритма для решения задачи по определению точки встречи прямой с плоскостью полученную схему счета целесообразно представить графически в виде "дерева", устанавливающего связь между исходными данными задачи и алгоритмом ее решения (рис. 328).
Из приведенной схемы видно, что машина сможет самостоятельно выбрать правильный путь решения, если программа будет составлена так, чтобы она начала работать по "жесткой" подпрограмме (5) основного (вариант I) алгоритма. После выполнения оператора V1 выполняется проба α, позволяющая выяснить, определяется ли точка в результате его выполнения*. Если да, то машина приступает к выполнению оператора VIa2, если нет, то ей следует выполнять оператор V8. Аналогичные пробы выполняются и после операторов V3, VIa4 , V6. По результатам этих проб машина либо продолжает решение по основной програм-ме, если точка определена, либо приступает к выполнению другого участка программы, когда точка не получена. Выбор нового участка зависит от того, при выполнении какого оператора не получена новая точка пересечения.
Пользуясь схемой счета (12) обобщенного алгоритма, машина самостоятельно решает любую задачу по нахождению точки встречи прямой с плоскостью, независимо от характера расположения исходных данных и варианта задания плоскости **.
Нахождение точки встречи прямой с плоскостью является элементарной, но часто встречающейся задачей, входящей в состав алгоритма для решения более сложных задач, например, задач по определению линии сечения линейчатой поверхности плоскостью.
Обозначим через R схему счета (алгоритм) для решения задачи по нахождению точки встречи прямой с плоскостью. Тогда в общем случае алгоритм для решения задачи по определению линии сечения линейчатой поверхности плоскостью в символической форме может быть записан:
∑0(αi); ∑1(Pi); ∑2(Si); ∑3(RPi); (13)
где ∑0(αi); — различные пробы, позволяющие выбрать правильный путь решения в зависимости от вида и характера расположения исходных данных; ∑1(Pi); — логическая последовательность элементарных операций для нахождения точки, через которую проходит прямолинейная образующая линейчатой поверхности; ∑2(Si); — последовательность выполнения операторов I или II для нахождения проекций прямолинейных образующих;∑3(RPi); — вспомогательные операции.
Выполнение R для всех задач рассматриваемого типа одинаково, оно может меняться только в пределах вариантов задания и расположения секущей плоскости. При определении сечения линейчатой поверхности плоскостью задача сводится к многократному выполнению подпрограммы R — определению точки встречи прямой с плоскостью. Содержание (∑1, ∑2, ∑3 ) продиктовано задачей определения частных положений последовательности прямолинейных образующих линейчатой поверхности; очевидно, для различных поверхностей оно будет различным.
Проследим изменение ∑1, ∑2, ∑3 в зависимости от вида линейчатой поверхности.
* На схеме (рис. 328) указаны также проба α0 и оператор V0, α0 — проба на число геометрических образов, заданных на чертеже. Если N = 4, то прежде чем приступить к выполнению основной программы, необходимо определить координаты точки схода следов (оператор V0).
** Исключение составляют два случая: если плоскость, проходящая через ось х, задана следами; если пересекающая плоскость прямая — профильная.
ПРИМЕР 1. Определить сечение цилиндрической поверхности плоскостью (рис. 329).
Для определения линии сечения произвольной цилиндрической поверхности плоскостью может быть рекомендован следующий план машинного решения задачи:
1) из массива ячеек памяти, где хранятся координаты растрэлементов, принадлежащих горизонтальной проекции криволинейной направляющей (множества M7 { ... } ), выбрать точку 1'1, имеющую минимальное значение х;
2) найти на фронтальной проекции криволинейной направляющей M2{...} точку 1'1 с х= x(.)l'1;
3) определить уравнение прямой n ∋ 1'1 и || прямой, определяемой множеством растрэлементов M8{...} ;
4) определить уравнение прямой n"1 ∋ 1"1 и || прямой М1{...} ;
5) найти точку встречи прямой n1 с плоскостью α, заданной пересекающимися прямыми, представленными множествами М3{...}, М4{...} и М5{...} , М6{...}.
Чтобы найти вторую точку, принадлежащую искомой линии сечения, нужно определить уравнения проекции следующей прямолинейной образующей поверхности. Для этого повторяем операции, предусмотренные пп. 1...4. Для определения положения второй (n'2) и всех последующих (n'3, n'4, .... n'n) проекций прямых берем на кривой М7{...} следующую из записанных точку (растрэлемент). После того, как будут определены уравнения проекций n'2 и n"2 (n'2 || n'1 и n"2 || n"1), машина приступает к выполнению п. 5. Цикл из операций, предусмотренных в пп. 1... 5, выполняется до тех
пор, пока на кривой M7{...} не останется ни одной точки. Тогда в символике машинных операторов операции ∑1, ∑2, ∑3 можно записать:
∑1(Pi) - П III X I V; * (14)
∑2(Si) - II II; (15)
∑3(RPi) - R. (16)
Схема счета программы для решения поставленной задачи примет вид
П1 III1 X3 I4 V5 II7 R8 (17)
Цикл П ... R8 выполняется до тех пор, пока в М7 {...} не останется ни одной точки.
ПРИМЕР 2. Определить сечение конической поверхности плоскостью (рис. 330) Отличие решения этой задачи от предыдущей будет состоять лишь в том, что выражение (15) может быть записано ∑2(Si) — II и схема счета примет вид
ПРИМЕР 3. Определить сечение однополостного гиперболоида плоскостью (рис. 331).
Для определения характера и последовательности выполнения операторов, входящих в ∑1, ∑2 и ∑3 воспользуемся свойством направляющих рассматриваемой поверхности, состоящим в том, что если спроецировать точку, взятую на одной из трех направляющих (принад-
* П — операция обращения к первой записанной в М7{...} массиве точке.
лежащих одному семейству), на плоскость α в направлении двух других направляющих и полученные точки соединить с соответствующими проекциями (следами) двух других направляющих, то полученные прямые будут принадлежать второму семейству образующих.
Точки пересечения соответственных прямых, принадлежащих разным семействам, определяют кривую второго порядка — сечение однополосного гиперболоида плоскостью а. В этом случае выражения (14), (15) и (16) примут вид
∑1(Pi) - П III V I V;
∑2(Si) - П II II II;
∑3(RPi) - R R R R I I V III V.
для превого цикла, а для всех последующих циклов.
∑3(RPi) - R R I I V III V.
Схема счета программы запишется в виде
ПРИМЕР 4. Определить сечение коноида плоскостью (рис. 332).
Решение этой задачи аналогично предыдущей с той лишь разницей, что точки следует брать на криволинейной направляющей и проецировать их на секущую плоскость в направлении прямолинейной направляющей коноида.
Схема счета в этом случае примет вид
Чтобы машина самостоятельно (без участия человека) могла выбрать правильный путь решения задачи, ей должна быть известна поверхность, линию пересечения с которой требуется определить. Признаками, с помощью которых машина сможет "распознать" по эпюру Монжа, с какой поверхностью она имеет дело при решении задачи, служат:
1) присутствие точечного образа;
2) отсутствие криволинейных образов;
3) число криволинейных образов.
Эти признаки положены в основу проб, составляющих содержание ∑0(αi) [из выражения (13)], которые должна выполнить машина для выбора нужного варианта решения.
Обозначим:
а) схемы счета (17) — Q1; (18) — Q2; (19) — Q3; (20)— Q4 ;
б) пробы: α1 — проба на наличие точечного образа, если точечный образ есть (α1 = 1), то выполняется массив Q2, если нет (α1 = 0), то следует переходить к пробе α2; α2 — проба на наличие криволинейного образа, если такой образ есть (α2 = 1), то необходимо выполнять пробу α3, если нет (α2 = 0), то машина должна приступить к выполнению массива Q3; α3 — проба на число криволинейных образов, если образ один (α3 = 1), то выполняется массив Q1,если два (α3 = 2), то машина приступает к выполнению массива Q4.
Вариант задания секущей плоскости не влияет на характер поиска, так как при составлении признаков прямолинейные образы не учитывались. В общем виде схема счета программы для решения рассмотренных задач примет вид