找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 760|回复: 5

[求助] [求助]:小妹初学lisp,一个问题!@

[复制链接]
发表于 2004-4-13 01:57:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
已知三角形三边及一角点,画此三角形.
我写了一下,但始终报错..

(defun c:text1()
(setq J1 (getpoint "\n请输入三角形左下角点:"))
  (setq A (getreal "\n请输入三角形底边长:"))
  (setq B (getreal "\n请输入三角形左邻边长:"))
  (setq C (getreal "\n请输入三角形右邻边长:"))
(setq S (/(+(+ A B)C)2))
  (setq AREA (sqrt((*(*(* S (- S A))(- S B )(- S C))))))
  (setq H (/(* 2 AREA)A))
  (setq D (sqrt (-(* C C)(* H H))))
  (setq Ang1 (atan(/ H D)))
  (setq Ang1 (* Ang1 (/ 180 pi)))
  (setq J2 (polar J1 0 A))
  (setq J3 (polar J1 Ang1 C))
  (command "pline" J1 J2 J3 "c")
  (prin1)
    )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-4-13 08:45:34 | 显示全部楼层
这样:
[php]
(defun c:text1 ()
  (setq J1 (getpoint "\n请输入三角形左下角点:"))
  (setq A (getreal "\n请输入三角形底边长:"))  ;这里最好使用输入距离函数
  (setq B (getreal "\n请输入三角形左邻边长:"))
  (setq C (getreal "\n请输入三角形右邻边长:"))
  (setq S (/ (+ (+ A B) C) 2))   ;多数数学函数都可以使用多个变量
  (setq AREA (sqrt ((* (* (* S (- S A)) (- S B) (- S C)))))) ;这里多了一重括号,这是出错的根源,另外根据你的写法,有一个右括号位置错误
  (setq H (/ (* 2 AREA) A))
  (setq D (sqrt (- (* C C) (* H H))))  ;这里计算的是右边角,C应为B
  (setq Ang1 (atan (/ H D)))
  (setq Ang1 (* Ang1 (/ 180 pi)))  ;Lisp计算采用的是弧度,不需要转换
  (setq J2 (polar J1 0 A))
  (setq J3 (polar J1 Ang1 C))  ;这里C也应该是B
  (command "pline" J1 J2 J3 "c")
  (prin1)
)

;;;加上格式化后

(defun c:text1 ()
  (setq        J1   (getpoint "\n请输入三角形左下角点:")
        A    (getdist J1 "\n请输入三角形底边长:")
        B    (getdist J1 "\n请输入三角形左邻边长:")
        J2   (polar J1 0 A)
        C    (getdist J2 "\n请输入三角形右邻边长:")
        S    (/ (+ A B C) 2)
        AREA (sqrt (* S (- S A) (- S B) (- S C)))
        H    (/ (* 2 AREA) A)
        D    (sqrt (- (* B B) (* H H)))
        Ang1 (atan (/ H D))
        J3   (polar J1 Ang1 B)
  )
  (command "pline" J1 J2 J3 "c")
  (princ)
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-13 09:06:32 | 显示全部楼层

Re: [求助]:小妹初学lisp,一个问题!@

最初由 dlldll 发布
[B]已知三角形三边及一角点,画此三角形.
我写了一下,但始终报错..

(defun c:text1()
(setq J1 (getpoint "\n请输入三角形左下角点:"))
  (setq A (getreal "\n请输入三角形底边长:"))
  (setq B (getreal "\n请?.. [/B]

语法和原理都有问题,修改后如下,不过没有多少使用意义。

  1.   [FONT=courier new]
  2. (defun c:text1 ()
  3.   (if (and (setq J1 (getpoint "\n请输入三角形左下角点:"))
  4.            (setq A (getdist j1 "\n请输入三角形底边长:"))
  5.            (setq J2 (polar j1 0.0 A))
  6.            (setq B (getdist j1 "\n请输入三角形左邻边长:"))
  7.            (setq C (getdist j2 "\n请输入三角形右邻边长:"))
  8.            (setq S (/ (+ A B C) 2.0))
  9.            (> s a)
  10.            (> s b)
  11.            (> s c)
  12.       )
  13.     (progn
  14.       (setq J3x (* B (/ (- (+ (* B B) (* A A)) (* C C)) (* 2.0 A B))))
  15.       (setq J3y (sqrt (- (* B B) (* j3x j3x))))
  16.       (setq j3 (list (+ (car j1) j3x) (+ (cadr j1) j3y)))
  17.       (command "pline" J1 J2 J3 "c")
  18.     )
  19.     (princ "\n数据有误,程序退出!")
  20.   )
  21.   (princ)
  22. )
  23.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-13 20:11:43 | 显示全部楼层
谢谢ll_j ,lijiao 的指教.获益菲浅.
这的确没有多大的实际意义.这是autolisp&dcl基础篇的一道作业题.
也是我的第一个lisp,没想到错误这么多.脸红了.
呵呵.
另一个朋友给我解释的这种写法我觉得也不错.
(defun c:text1( / J1 A B C cosA sinA <A)
  (setq J1 (getpoint "\n请输入三角形左下角点:"))
  (setq A (getreal "\n请输入三角形底边长:"))
  (setq B (getreal "\n请输入三角形左邻边长:"))
  (setq C (getreal "\n请输入三角形右邻边长:"))
  (setq cosA (/ (- (+ (expt A 2) (expt B 2)) (expt C 2)) (* 2 A B)))  
  (if (= cosA 0)
    (setq <A (/ pi 2))
    (progn
      (setq sinA (sqrt (- 1 (expt cosA 2))))
      (setq <A (atan (/ sinA cosA)))
    )
  )
  (command "_.pline" J1 (polar J1 0 A) (polar J1 <A B) "cl")
  (princ)
)

希望能给我一样刚学lisp的朋友有所帮助.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-4-14 00:30:42 | 显示全部楼层
怎样学习lisp呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-4-14 01:32:18 | 显示全部楼层
最初由 fetalpig 发布
[B]怎样学习lisp呢 [/B]


多来这里和大家聊天.
多向高手请教罗.
买本基础点的lisp的书,从头做起.
呵呵,我现在正在学习.你也加油.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 03:42 , Processed in 0.647278 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表