RSS
当前位置 : 机电专业技术网>CAD/CAM>AutoCAD>列表

AutoLISP教程(七)|AutoLISP教程

发布时间:2006-08-03 关键字: 教程 setq 函数 ang c1 返回 r1 dtr r2 sqrt polar 一个

14.14  polar与sqrt函数
1.polar函数
Polar函数利用相对于给定点的角度及距离定义一个点(见图12-11)。该角度以弧度表示,逆时针方向为正(假定angbase及angdir均为默认设置)。
polar函数的格式为:(polar point angle distance)
  其中Point………………参照点
      angle……………...对于参照点的角度
      distance………...…与参照点间的距离

  示例:
(Polar pt1 ang dis)
(setq pt2(polar pt1  ang dis))
(setq pt2(polar‘(2.0  3.25)ang dis))
2.Sqrt函数
sqrt函数计算一个数的平方根,且其返回值总为实数。sqrt函数的格式为:(sqrt number)
其中   number............待求平方根的数(实数或整数)
如图12-12所示,应用sqrt函数:(setq  hyp(aqrt(+(* base base)(“ht ht))))

示例:
    (sqrt 144)                                         返回12.0
    (sqrt 144.0)                                       返回12.0
    (setq x(sqrt 57.25))                             返回7.566373
    (setq x(sqrt(* 25 36.5)))                       返回30.207615
    (setq x(sqrt(/ 7.5(cos 0.75))))               返回3.2016035
    (setq hyp(sqrt(+(* base base)(* ht ht))))     
例4   编写一个AutoLISP程序,该程序可以画出一个等边三角形及其内切圆(见图12-13)。该程序还应提示用户输入圆的半径及圆心。

下面的文件为例4的程序清单。
(defun dtr(a)
  (*a( Pi 180.0))

(〔defun c:trgcir(/ r c d p1 p2 p3)
(setvar“cmdecho”0)
(graphscr)
  (setq r(getdist“\n Enter circle radius:\")
  (setq c(getPoint“\n Enter center of circle:\"))
  (setq d(/r(sin(dtr 30))))
  (setq P1(Polar c(dtr 210)d))
  (setq P2(Polar c(dtr 330)d))
  (set P3(Polar c(dtr 90) d))
  (command“circle” c r)
  (Command“line”  p1  p2  p3“c”)
  (setval“cmdecho”1)
  (princ)
   )
练习3
编写一个AutoLISP程序,画出一个等腰三角形P1,P2,P3,三角形的底边(P1,P2)与正X轴之间有一个夹角B(见图12-14)。该程序还应提示用户输入起点P1,L1的长度及角A和角B。

练习4
编写一个程序,画出一个带中心线的键槽。该程序还应提示用户输入键槽的长度,宽度及中心线的图层名(见图12-15)。
14.15  itoa、rtos、strcase及prompt函数
1.itoa函数
itoa函数将一个整数转换成字符串,并将该字符串返回。
itoa函数的格式为:(itoa  number)
其中number………待转换为字符串的整数
  示例:
(itoa 89)返回“89\"
(itoa -356)返回“-356”
(setq intnum 7)
(itoa intnum)
(setq intnum 345)
(setq intstrg(itoa intnum))
2.rtos函数
rtos函数将一个实数转换成字符串,并将该字符串返回。
rtos函数的格式为:(rtos realnum)
其中  alnum………待转换为字符串的实数
示例:
(rtos 50.6)返回“50.6”
(rtos -30.0)返回“-30.0\"
(setq realstrg(rtos 5.25))返回“5.25”
(setq realnum 75.25)
(setq realstrg(rtos realnum))返回“75.25”
rtos函数还可以带有mode和precision参数。带有mode和precision参数的rtos函数格式为:
    (rtos realnum[mode][precision])
    其中 realnum…......…......实数
         mode…………............单位模式,如decimal, scientific
         precision…......……数字精度
3.strcase函数
strcase函数将字符串中的字符转换为大写形式或小写形式。
其格式为:(strcase string[true])
    其中string………待转换大小写的字符串
        true………...若其值不为nil,则所有字符转换为小写形式
true是可选项。若省略或其值为nil,字符串将转换为大写形式,若其值不为nil,字符串将转换为小写形式。
    示例:
(strcase“welcome Home”)       返回“WELCOME HOME”
(setq t 0)
(strcase“Welcome Home”  t)    返回“welcome home
(setq answer(strcase(getstring“Enter Yes or No:”)))
4.prompt函数
prompt函数用于在屏幕的命令提示区内显示消息,该消息的内容必须置于双引号中。Prompt
函数的格式为:(prompt message)
  其中message………..要显示在屏幕上的消息
    示例:
    (prompt“Enter circle diameter:”)
    (setq d(getdist(prompt“Enter circle diameter:”)))
 注意  在双屏幕系统中,prompt函数在两个屏幕上均显示消息。
例5
    编写一个程序,画出半径分别为rl和r2的两个圆,用来表示间距为d的两个皮带轮。连接两圆圆心的直线与X轴成一个夹角,如图12-16所示。

    输入                                输出
  小圆的半径rl                    半径为rl的小圆
大圆的半径r2                    半径为r2的大圆
圆间距离d                       两圆的公切线
中心线倾角a
小圆的圆心c1
处理过程
1.计算X1、X2的长度
2.计算角度ang
3.根据c1点确定c2点
4.确定点P1,P2,P3,P4
5.以c1为圆心,r1为半径画出小圆
6.以c2为圆心,r2为半径画出大圆
7.画出P1 到P2,P3到P4的直线
计算过程
X1=r2-r1
X2=sqrt[d^2-(r2-r1)^2]
tan ang=X1/X2
ang=atan(x1/x2)
ala=90+a+ang
alb=270+a ang
a2a=90+a+ang
a2b=270+a ang

下面的文件为例5的AutoLISP程序清单;
(defun dtr(a)
(* a (/ pi 180.0))
  )
(defun c:belt(/r1 r2 d a c1 xl x2 c2 pl p2 p3 p4)
(setVar“cmdecho”0)
(graphscr)
(setq r1(getdist“\n Enter radius of small pulley:\"))
(setq r2(getdist“\n Enter radius of large pulley:\"))
 (setq d(getdist“\n Enter distance between pulleys:”)
(setq a(getangle“\n Enter angle of pulleys:”)
 (setq c1(getpoint“\n Enter center of small pulleys:”)
 (setq x1(-r2 r1))
  (setq x2(sqrt(-(* d d)(*(-r2 r1)(-r2 r1)))))
  (setq  ang(atan (/  xl  x2)))
 (setq c2(polar (c1 a d))
 (setq pl(polar c1(+ ang  a (dtr 90)) rl))
  (setq p3(polar c1(-(+ a dtr(270)) ang)rl))
 (setq p2(Polar c2(+ ang a dtr(90)) r2))
  (Setq p4(polar C2(-(+ a (dtr 270) Ang)r2))

  (command“circle” c1  p3)
  (command“circle” c2  p2)
  (command“line”  pl  p2“”)
  (command“line”  p3  p4“”)
   (setvar“cmdecho ”1)
  (Princ))
说明
第1行:(defun dtr(a)
本行中,defun函数定义了一个用于将角度转换为弧度的函数dtr(a)。
第2行: (* a (/ pi 180.0))
(/Pi 180)将Pi的值除以180,得到的结果再与角a相乘(180度等于Pi弧度)。
第4行:(defun c:belt(/r1 r2 d a c1 xl x2 c2 pl p2 p3 p4)
本行中,defun函数定义了一个函数。c:belt,该函数用于生成带公切线的两个圆。
第12行:(setq x1(-r2 r1))
本行中,setq函数将r2-r1的值赋予变量xl。
第13行:((setq x2(sqrt(-(* d d)(*(-r2 r1)(-r2 r1)))))
本行中,(- r2 rl)用r2减去r1,(*(- r2 r1)( r2  r1))计算(- r2 r1)的平方。
(sqrt(-(* d d)(*(-r2 r1)(-r2 r1))))则计算该差的平方根,Setq x2该表达式的结果赋予变量x2
第14行:(setq ang(atan(/ x1 x2)))
本行中,(atan(/xl x2)以算(/ x1  x2)结果的反正切。Setq ang将以弧度表示的角度值赋予变量ang.
第15行:(setq  cZ(polar c1 a d))
本行中,(polar c1 a d)使用polar函数确定c2点的位置,该位置是由相对于c1点的距离d及与正X轴的夹角a来确定的。
第16行:(setq pl(polar c1(+ ang a(dtr 90))rl))
  本行中,(polar c1(+ ang a(dtr 90))rl)确定pl点位置,该位置是由相对于c1点的距离r1及与正X轴的夹角(+ ang a(dtr 90))来确定的。
第20行:(command“circle” c1 p3)
本行中,command函数使用AutoCAD的CIRCLE命令,以c1为圆心,P3点定义的距离为半径画圆。
第22行:(command“line”  pl P2“”)
本行中,command函数使用AutoCAD的LINE命令从P1到P2画一条直线。结尾的一对双引号(“”)表示返回,用于终止LINE#令。
练习5
    编写一个AlltOLISP程序,画出两个圆及它们的内公切线,如图12-17所示。该程序还应提示用户输入圆的直径及两个圆的中心距。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册

外部连接