明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1517|回复: 2

[求助]小妹初学lisp,遇到一个问题大哥能告知吗?

[复制链接]
发表于 2004-4-13 02:02:00 | 显示全部楼层 |阅读模式
已知三角形三边及一角点,画此三角形.
我写了一下,但始终报错..

(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)
)
发表于 2004-4-13 08:01:00 | 显示全部楼层
根据你的已知条件应该是求不出三角形的,不过按你的程序意思倒是可以了,这个样子就很简单了,你为什么会做的那么复杂?数学不够扎实啊... 三角形的三边是有限制的,你最好在程序里做个判断: (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)
)
 楼主| 发表于 2004-4-13 20:16:00 | 显示全部楼层
小妹谢谢哥哥的指教.你批评得对.呵呵.我在晓东cad上也问了这个问题. 有几位朋友得指教也很好.我真是学到很多东西. ;;;;;;;;;; (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)
)
;;;;;;;;;; (defun c:text1 ()
(if (and (setq J1 (getpoint "\n请输入三角形左下角点:"))
(setq A (getdist j1 "\n请输入三角形底边长:"))
(setq J2 (polar j1 0.0 A))
(setq B (getdist j1 "\n请输入三角形左邻边长:"))
(setq C (getdist j2 "\n请输入三角形右邻边长:"))
(setq S (/ (+ A B C) 2.0))
(> s a)
(> s b)
(> s c)
)
(progn
(setq J3x (* B (/ (- (+ (* B B) (* A A)) (* C C)) (* 2.0 A B))))
(setq J3y (sqrt (- (* B B) (* j3x j3x))))
(setq j3 (list (+ (car j1) j3x) (+ (cadr j1) j3y)))
(command "pline" J1 J2 J3 "c")
)
(princ "\n数据有误,程序退出!")
)
(princ)
)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 00:29 , Processed in 0.178664 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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