第八讲: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,用于给坐标镜像。
  31+ 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 carcdr的组合函数
    形式:cxr  cxxr  cxxxr 
    x表示ad,作用的先后顺序是“从右到左”
    (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小时内删除。