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


Загрузка...