lisp 程序:等腰三角形 :在autocad2012中加载有时错误,有时能出现一条底边

;画出一个等腰三角形P1,P2,P3,三角形的底边(P1,P2)与正X轴之间有一个夹角B。;该程序还应提示用户输入起点P1,L1的长度及角A和角B(defundtr(a)... ;画出一个等腰三角形P1,P2,P3,三角形的底边(P1,P2)与正X轴之间有一个夹角B。;该程序还应提示用户输入起点P1,L1的长度及角A和角B
(defun dtr(a)
(* a (/ pi 180.0))
)
(defun c:dy(/ p1 a b L1 L2 p2 p3 p4)
(setvar "cmdecho" 0)(graphscr)
(setq L1 (getdist "\n请指定等腰三角形底边长度:"))
(setq b (getangle "\n请指定等腰三角形底角度:"))
(setq a (getangle "\n请指定等腰三角形底边旋转角度:"))
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L2 (/ L1 2 (cos (b)))) ;计算腰长
(setq p2 (polar p1 (dtr (a)) L1)) ;底边另一点
(setq p3 (polar p1 (dtr (+ b a)) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
展开
 我来答
下有真如是非7
2014-11-14 · TA获得超过781个赞
知道小有建树答主
回答量:232
采纳率:80%
帮助的人:69.8万
展开全部
(defun c:dy (/ p1 a b L1 L2 p2 p3)
(setvar "cmdecho" 0)
(graphscr)
(setq L1 (getdist "\n请指定等腰三角形底边长度:"))
(setq b (getangle "\n请指定等腰三角形底角度:"));用户输入角度,以弧度返回该角度
(setq a (getangle "\n请指定等腰三角形底边旋转角度:"));用户输入角度,以弧度返回该角度
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L2 (/ L1 2 (cos b))) ;计算腰长
(setq p2 (polar p1 a L1)) ;底边另一点
(setq p3 (polar p1 (+ b a) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
你套用一个子函数是多余的 也是错误的

getangle

暂停以等待用户输入角度,然后以弧度形式返回该角度
(getangle [pt] [msg])

参数

pt

当前 UCS 中的二维基点。

如果指定了 pt 参数,用户可以再指定一个点来给 AutoLISP
输入一个角度。也可以提供三维基点,但角度的度量都是在当前构造平面上进行的。

msg

显示给用户的提示信息。

返回值

用户指定的角度(弧度)。

getangle 函数以逆时针方向测量零弧度方向(由系统变量 ANGBASE
设置)和用户指定的两点确定的直线之间的角度。所返回的角度以弧度表示,是相对于当前构造平面(当前标高处的当前 UCS 的 XY 平面)来测量的。

示例

下面的样例代码说明如何使用不同的参数来调用 getangle:

命令: (setq ang (getangle))

命令: (setq ang (getangle '(1.0
3.5)))

命令: (setq ang (getangle "指定方向:
"))

命令: (setq ang (getangle '(1.0 3.5)
"指定方向: "))

使用说明

用户可以通过输入一个以 AutoCAD
的当前角度单位格式表示的数来指定角度。虽然当前角度单位格式可能是度、百分度或其他单位,但本函数总是以弧度为单位返回角度值。用户也可以通过在图形屏幕上指定两个点来指定角度。AutoCAD
从第一个点到当前十字光标画一条拖引线,以帮助用户确定角度。

理解输入角度与 getangle 函数返回的角度之间的区别是非常重要的。传送给 getangle 函数的角度是根据系统变量
ANGDIR 和 ANGBASE 的当前设置确定的。然而,一旦输入了一个角度,它就以 ANGBASE 的当前设置为零弧度,按逆时针方向来测量,而忽略
ANGDIR 的设置。

用户不能输入另一个 AutoLISP 表达式来响应 getangle 函数的请求。
追问

终于找到了两者的用途.

greatlmy4
推荐于2016-08-14 · TA获得超过1330个赞
知道小有建树答主
回答量:1446
采纳率:76%
帮助的人:311万
展开全部
我把你的程序改了一下,你试试看。

(defun c:dy(/ p1 a b L1 L2 p2 p3 p4)
(setvar "cmdecho" 0)(graphscr)
(setq p1 (getpoint "\n请指定等腰三角形底边旋转点:"))
(setq L1 (getdist p1 "\n请指定等腰三角形底边长度:"))
(setq b (getangle p1 "\n请指定等腰三角形底角度:"))
(setq a (getangle p1 "\n请指定等腰三角形底边旋转角度:"))
(setq L2 (/ L1 2 (cos b))) ;计算腰长
(setq p2 (polar p1 a L1)) ;底边另一点
(setq p3 (polar p1 (+ b a) L2 )) ;顶点
(command "line" p1 p2 p3 "c")
(setvar "cmdecho" 1)
(princ)
)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式