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, описываемая ниже.