Введение в Автолисп

Рыжиков Роман Клавдиевич

2. МАТЕМАТИКА В АВТОЛИСПЕ

 

 

2.1. Функции обработки чисел

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

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

C=A+B

или в Паскале

c:=a+b

в Автолиспе выглядит как

(setq с (+ a b)).

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

(+ число число ... ) . Функция возвращает сумму всех чисел. Числа могут быть как целыми, так и вещественными. Сумма целых чисел есть целое число. Если среди чисел есть хотя бы одно вещественное, результат - вещественное число. Например:

(+ 3 5) возвращает 8,

(+ 1 2 3 4.5) возвращает 10.5,

(+ 1 2.0 3 4 5) возвращает 15.0.

(- число [число] ... ) . Функция вычитает второе число из первого и возвращает результат. Если чисел несколько, то возвращается результат последовательного вычитания всех последующих чисел из первого. Если число одно, его знак меняется на обратный. Примеры:

(- 5 3) возвращает 2,

(- 18 4.5 6 2) возвращает 5.5,

(- 6) возвращает -6.

(* число [число] ... ) . Функция возвращает произведение всего рядя чисел. Если введено одно число, возвращается результат его умножения на единицу. Примеры:

(* 5 3) возвращает 15,

(* 2 3.5 4 6) возвращает 168.0,

(* 3) возвращает 3.

(/ число [число] ... ) . Функция возвращает результат деления первого числа на произведение всех последующих. Единственное введенное число делится на единицу. Примеры:

(/ 8 5) возвращает 1.6,

(/ 720 3 5 2) возвращает 24,

(/ 4) возвращает 4.

(1+ число ) возвращает число, увеличенное на единицу,

(1- число ) возвращает число, уменьшенное на единицу. Примеры:

(1+ -17.5) возвращает -16.5,

(1+ 7) возвращает 8,

(1- -17.5) возвращает -18.5,

(1- 7) возвращает 6.

(abs число ) . Функция возвращает абсолютную величину числа.

(atan число1 [ число2 ]) . Функция возвращает значение в радианах арктангенса, определяемого параметрами. Если параметр только один (число1 ), возвращается угол, тангенс которого равен этому числу. Если введены два числа, то первое делится на второе и возвращается угол, тангенс которого равен вычисленному частному. Например:

(atan 0.5) возвращает 0.463648,

(atan 1.0) возвращает 0.785398,

(atan -1.0) возвращает -0.785398,

(atan 3.0 4.0) возвращает 0.643501.

Если число2 равно нулю, возвращается угол ±1.5708, знак которого соответствует знаку числа1 .

(logand число число ... ) возвращает результат логического побитового AND списка целых чисел. Результат - целое число. Примеры:

(logand 7 15 3) возвращает 3,

(logand 2 3 15) возвращает 2,

(logand 8 3 4) возвращает 0.

(logior число число ... ) возвращает логическое побитовое OR списка чисел. Примеры:

(logior 1 2 4) возвращает 7,

(logior 9 3) возвращает 11.

(lsh число1 число_битов ) производит сдвиг числа1 , пересчитанного в двоичную систему, на заданное число_битов . Если число_битов положительно, сдвиг осуществляется влево, если отрицательно - вправо. Примеры:

(lsh 22 -1) возвращает 11,

(lsh 22 2) возвращает 120.

Следующие 14 функций приводятся без примеров:

(cos угол ) возвращает значение косинуса угла,

(sin угол ) возвращает значение синуса угла,

(exp число ) возвращает натуральный антилогарифм числа, (expt основание степень ) возвращает результат возведения основания в заданную степень,

(fix число ) производит преобразование числа в целое и возвращает целую часть числа,

(float число ) производит преобразование числа в вещественное число,

(gcd число1 число2 ) возвращает наибольший общий делитель двух чисел,

(log число ) возвращает натуральный логарифм числа как вещественную величину,

(max число число ) возвращает большее из двух чисел,

(min число число ) возвращает меньшее из двух чисел,

(minusp число ) устанавливает тип числа (целое или вещественное) и возвращает его отрицательное значение,

(rem число число ) делит первое число на второе и возвращает остаток,

(sqrt число ) возвращает квадратный корень из числа как вещественное число,

(zerop число ) определяет тип числа и устанавливает число равным нулю.

 

2.2. Некоторые геометрические функции

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

(angle точка1 точка2 ) . Эта функция возвращает значение угла между осью X текущей системы координат и отрезком, определяемым начальной (точка1 ) и конечной (точка2 ) точками отрезка прямой. Угол замеряется в радианах от оси X до отрезка в направлении против часовой стрелки, если системная переменная ANGDIR установлена в 0. Если отрезок находится в трехмерном пространстве, возвращается угол между осью X и проекцией этого отрезка на текущую плоскость XY.

(distance точка1 точка2 ) . Функция возвращает расстояние между двумя точками в трехмерном пространстве. Если одна координата хотя бы у одной точки опущена, Автолисп считает обе точки находящимися в двумерном пространстве и возвращает расстояние между проекциями этих точек на текущий план.

(inters точка1 точка2 точка3 точка4 [условие] ) . Функция анализирует параметры двух линий и возвращает точку их пересечения или nil, если таковая отсутствует. Если дополнительный аргумент условие присутствует и имеет значение nil, точка пересечения возвращается, даже если она находится вне одного или обоих отрезков. Если же аргумент условие опущен или не равен nil, точка пересечения должна находиться внутри отрезков, в противном случае возвращается nil.

Пусть определены точки:

(setq a '(1.0 1.0) b '(5.0 5.0))

(setq с ‘(6.0 1.0) d ‘(6.0 2.0)),

тогда

(inters a b с d) возвращает nil,

(inters a b с d T) возвращает nil,

(inters a b с d nil) возвращает (6.0 6.0).

(polar точка1 угол расстояние ) . Функция определяет положение точки, находящейся на указанном расстоянии от точки точка1 под углом угол к оси X текущей системы координат и возвращает ее координаты.

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