第八讲:float()函数 AutoLISP的基本函数
AutoLISP程序可看作是一个一个函数的调用。
函数的调用格式:
(函数名 [<参数1>] [<参数2>] [<参数n>])
2.1 赋值函数与求值函数
1 赋值函数
格式: (setq <sym1> <expr1> [<sym2> <expr2>] )依次将每个表达式<expr>的值赋给符号<sym>,要求参数必须成对出现,返回最后一个表达式的值。
例如:
command: (setq a 5.0)
5.0000
command: !a
5.0000
command : (setq x12 2.5 y12 (+ x12 2.0))
4.5000
相当于 (setq x12 2.5)
(setq y12 (+ x12 2.0))
2 禁止求值函数
格式:(quote <expr>)
阻止求值器对其参数<expr>求值,返回没被求值的表达式。
’(+ 6 5) 简写形式,等效的表达形式是( quote (+ 6 5))
作用:可以“保护”一些表达式作为数据使用,而不是作为AutoLISP函数调用被求值。例如:
command : (car ‘(1 2 3)) 等效于 (car (list 1 2 3)) 取表中第一个元素
1 返回结果
2.2 数值函数
数的运算遵循以下规则:
(1)若参数表中的所有参数都为整型数,则AutoLISP求值器对参数表做整型运算,返回整型数值。
(2)若参数表中有一个实型数,则对表中的参数进行浮点数学运算,返回实型数。
2.2.1 算术运算函数
1 (+ <number> <number> )返回所有<number>的和
(+ 20 5 13) 返回38
(+ -20 5.5) 返回-14.5000
(+ (setq x 2) (+ x 3.0) 6.5) 返回13.5000
注意:多个整数相加时,要防止总和超出范围而出错。
2(- <number1> <number2> )返回<number1>-〈number2〉-〈number3〉-的结果,若只有一个参数,则返回0-<number1>的结果。
(- 2 14) 返回-12
(- (+ 80 4.0) (- 2 40)) 返回122.000
84.0 -38
(setq x 6) 返回6
(- x) 返回-6,用于给坐标镜像。
3(1+ 〈number〉)返回〈number〉+1的结果
(1-〈number〉)返回〈number〉-1的结果
例如:
(setq x –6.52) 返回-6.5200
(1+ x) 返回-5.5200
(1- x) 返回-7.5200
4 (* <number> <number> )返回各数乘积的结果
(* 2 3 4) 返回24
5 (/ <number1> <number2> ) 返回<number1>除以<number2>,再除以<number3>运算的结果
(/ 100 3 2) 返回16
(/ 100 3.0 2)返回16.6667
6 (rem <number1> <number2> )返回<number1> / <number2>整除之后的余数。
(rem 41 5 –4) 返回1
相当于(rem (rem 41 5) –4)
若除数非0,则其符号与<number1>的符号相同。如
(rem –6 4) 返回-2
(rem 6 4) 返回2
7 (max <number1> <number2> )返回最大值
(min <number1> <number2> )返回最小值
例如:
(max (setq a 683) (setq b (- a 580.0)) –25.0) 返回683.00
683 103.0 -25.0
8 (exp <number>) 返回e<number>的值
(exp 1) 返回2.71828; (exp 0) 返回1; (exp 3) 返回 20.0855
9 (expt <base> <power>) 返回base<power>的值
(expt 2 3)=8;
10 (log <number>) 是 (exp <number>)的反函数,返回值是实数
(log 2.71828) 返回 0.99999; (log 1) 返回0; (log 20.0855) 返回3.0
11 (sqrt <number>) 返回平方根,返回值是实数。例如:
(sqrt (/ 4 2.0)) 返回1.414;
编程:已知直角三角形的两边长a,b,求其斜边长。
(setq a 3.0 b 4.0)
(setq c (sqrt (+ (expt a 2) (expt b 2)))) 返回5.0
12 (abs <number>) 返回<number>的绝对值
2.2.2 三角函数
三角函数的参数可以是整型或实型,返回值总是实型数。
1 (sin <angle>) 返回<angle>的sin值,<angle>是以弧度为单位。
For example: (sin (/ pi 6)) 返回0.5; (sin (/ pi 2)) 返回1.0
(sin (/ pi 4)) 返回0.707107
2 (cos <angle>) 返回<angle>的cos值,<angle>是以弧度为单位。
For example: (cos (/ pi 6)) 返回0.866025; (cos 0) 返回1.0
(cos (/ pi 4)) 返回0.707107
For example: (setq tan45 (/ (sin (/ pi 4)) (cos (/ pi 4)) )) 返回1.0
(setq tan30 (/ (sin (/ pi 6)) (cos (/ pi 6)) )) 返回0.57735
3 (atan <number1> [<number2>]) 若只有参数<number1>,返回其反正切值。否则,返回(atan <number1>/<number2>)的反正切弧度值。
For example: (atan 1) 返回 0.785398弧度
转化为:(setq arctodgree (* 180 (/ 0.785398 pi))) 返回45度
2.2.3 数的类型转换函数
1 (float <number>) 返回将<number>转换为实型数的结果。
(float 2) 返回2.0000
(float 2.65) 返回2.6500
2 (fix <number>) 返回截尾取整的结果
(fix 3.999) 返回3
(fix -3.999) 返回-3
2.2.4 表处理函数
1 (car <list>) 返回表<list>的第一个顶层元素
若<list>为NIL,返回NIL;若<list>为点对,返回左元素。
(car ‘(x y z)) = (car (list x y z)) 返回x
(car ‘(( a b (c)) (d) 5)) 返回(a b (c))
(car ‘(0 . “line”)) 返回0
(car ‘()) 返回nil
2 (cdr <list>) 返回表<list>中去掉第一个元素剩下的元素组成的表
若<list>为NIL,返回NIL;若<list>为点对,返回右元素(可以是非表)。
(cdr ‘(x y z)) 返回 (y z)
(cdr ‘((a b (c)) (d) 5)) 返回((d) 5)
(cdr ‘(0 . “line”)) 返回“line”
(cdr ‘()) 返回nil
(cdr ‘(a)) 只有一个元素的表,返回nil
注意:
car 和cdr并不毁坏或改变表的结构和值,如:
(setq L ‘(5 “ok” abc)) 返回(5 “ok” abc)
(car L) 返回5
(cdr L) 返回( “ok” abc)
!L 返回(5 “ok” abc)
3 car和cdr的组合函数
形式:cxr cxxr cxxxr
x表示a或d,作用的先后顺序是“从右到左”
(cadr ‘((a b) (c))) 返回(c)
等效于(car (cdr ‘((a b) (c))))
在AutoLISP语言中,图形中的点是用两个(二维点)或三个(三维点)实型数组成的表来表示的。一般用car获取x坐标,cadr获取y坐标,caddr获取z坐标。如
(setq pt2 ‘(5.2 1.0)) 返回(5.2 1.0)
(setq pt3 ‘(5.2 1.0 3.0)) 返回 (5.2 1.0 3.0)
(car pt2) 返回5.2
(cadr pt2) 返回1.0
(caddr pt3) 返回3.0
4 (last <list>) 返回表<list>顶层的最后一个元素,若<list>为nil,则返回nil。
(last ‘(a b (c (d e)))) 返回(c (d e))
5 (nth <n> <list>) 返回<list>中的顶层第<n>个元素,n0,第一个元素是0号,如果n大于最后元素的序号,返回nil。
(nth 3 ‘(a b c d)) 返回d
(nth 2 ‘(a (ab) (c d) e)) 返回(c d)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论