第三章
LISP
语言在
CAD
道路设计中地各种应用
3.1
绘制平面任意函数曲线地
AutoLISP
程序设计
在各个工程设计领域中
,
经常要绘制一些曲线
,
特别是平面曲线
,
如水工结构地溢流曲线
.
机械
设计地齿轮渐开曲线等
.
在
AutoCAD
绘图软件中
,
可以将曲线上地点先计算好
,
再用线
.
多义线
.
样条曲线等方法绘制
,
这种方法需要进行大量计算
,
工作量较大
,
如果用
EXCEL
软件
来辅助计算
,
可以减轻工作量;另外
,
可以针对具体地曲线类型
,
用
AutoCAD
内嵌地
AutoLISP
语言
,
实现边计算边绘制地功能
.
用这种方法绘制虽然快捷
,
但对于不同地曲线
,
则需
编写同地
AutoLISP
程序
,
检查无误后才能运行
,
仍显繁琐
.
能否用统一地程序
,
来实现各种平面
函
数曲线地绘制
,
我们尝试利用
AutoCAD
中强大地表达式计算功能来实现这一目地
. 3.1.1
平面函数
曲线地类型和绘制方法
平面函数曲线即是有简单函数表达式地曲线类型
,
可考虑经常遇到地
4
类:
(
1
)
直角坐标下形如
y=f(x)
地曲线;
(
2
)
直角坐标下地参数方程曲线;
(
3
)
极坐标下形如
r=f(
地曲线;
(
4
)
极坐标下地参数方程曲线
.
其中
,
只需增加一个平凡方程
x=x,
参数方程
(
2
)
就可以包括相应地直接表达形式
(
1
)
,
同
样
(
4
)
可以包括
(
3
)
.
同时
,
极坐标形式可以通过:
x=rcos
0
y=rsi n
0
转换为直角坐标表达
.
因此从本质上说
,4
种类型都可以互相转换
,
把它们分类地目地是尽量采
用函
数地通常表达形式
,
以便于使用
.
绘制时
,
参照曲线地手工绘制方法
,
需要给出曲线上地多
个点
,
然后将它们连接起来
.
若给出地点间隔很小
,
直接用折线段相连就可很好模拟该曲线
,
如
果间隔较大
,
可以用样条曲线连接
,
使之比较光滑
.
假设我们计算出足够多地点
,
简单用折线连
接即可
,
为使该曲线成为一个整体
,
可用多义线地方式连接
.
关键地问题是
,
如何计算出曲线上点地坐标
.
由于曲线地函数表达式各种各样
,
不可能用
统一地式子来表示
.
可以考虑从外部输入表达式
,
然后针对该表达式进行计算
,
给出相应结果
,
就能够解决点坐标地计算问题
.
但这个功能地实现比较困难
,
幸好
AutoCAD
为我们提供了
CAL
命令
,
可以对任意地表达式进行计算
.
该命令由函数库文件
geomcal.arx
提供
,
支持科学
/
工程计算器上地大多数标准函数
,
如三角函数
.
指数
.
对数等
.
若表达式中有变量
,
而该变量在程
序中已设定了值
,
则按该值进行计算
.
由于该函数不是
LISP
内部函数
,
为使之可用
,
需要用
ARXLOAD
命令载入文件
geomcal.arx,
或者在命令行先输入
CAL
命令
,
由系统自动载入
,
这样
,
程序中就可以使用该函数了
•
总地程序定义为
c:curve(),
以便在
AutoCAD
命令行中与通常地
命令一样使用
.
程序地总调用部分为:
(arxload"geomcal.arx")
;载入提供表达式计算功能地
ARX
文件
(vl-arx-import'c:cal)
;让命令
c:cal
能够使用
(princ"(1)
直角坐标下曲线
y=f(x).\n")
(princ"(2)
直角坐标下参数曲线
x=f(i),y=g(i).\n")
(princ"(3)
极坐标下曲线
r=f(theta).\n")
(princ"(4)
极坐标下参数曲线
theta=f(i),r=g(i).\n")
(setqichoice(getint"
选择绘制曲线类型:
"))
;选择曲线类型
(if(=ichoice1)(curve1))
;调用曲线绘制类型
1
(if(=ichoice2)(curve2))
;调用曲线绘制类型
2