Andrew1979 发表于 2022-7-5 23:16:02

三角帮助

我正在尝试创建一个椽子。用户将输入度数(例如30度)
和椽子厚度(例如90mm)
如何使用cos函数来实现这一点?我知道如果我使用cos 30,它会给我弧度,但我如何将其转换为铅垂线深度。
我知道铅垂线深度是103.92mm,但我需要使用什么公式来获得这个数字?
谢谢你的帮助,我已经努力解决这个问题好几个小时了。

MSasu 发表于 2022-7-5 23:29:56

你能把你想达到的目标的草图贴出来吗?我不确定你用的是什么专业术语。
 
我想我明白了:
(setq theThick 90.0
   theAngle 30.0)
(/ theThick (cos (* (/ theAngle 180.0) pi)))

Andrew1979 发表于 2022-7-5 23:41:11

谢谢,看起来是一个很好的公式。我只有一个问题。当我使用代码时,我得到3个数字。

(setq Plumb (/ 90 (cos (* (/ Pitch 180.0) pi)))

当我为音高(30度)键入30时,当我键入!在命令提示下,我得到(-633.304-701.633 0.0)而不仅仅是一个数字。有什么想法吗?

MSasu 发表于 2022-7-5 23:41:57

你在函数定义中使用这个吗?你能把全部代码发出去吗?

Andrew1979 发表于 2022-7-5 23:57:06

以下是目前为止的代码:

(defun d2r (a)
(* pi (/ a 180))
)
(defun r2d (a)
(* 180.0 (/ a pi))
)


(defun c:truss ()
(getInput-RoofTruss)
(processInput-RoofTruss)
;(DrawObject-RoofTruss)
)

(defun getInput-RoofTruss ();/ IP SP TP SH MDF ND
(setq IP (getpoint "\nPick Insertion Point << "))
(setq SP (getpoint IP "\nPick or Enter Width << "))
(setq Pitch    (getint"\nEnter Roof Pitch << "))
(setq OverHang (getreal"\nEnter OverHang << "))
)


(defun processInput-RoofTruss ()
(setq ANG   (angle IP SP))
(setq ANG   (r2d ANG))
(setq width (distance IP SP))
(setqPlumb (/ 90 (cos (* (/ Pitch 180.0) pi)))   
   
(setqOverHang-P1(polar IP(d2r (+ (- ANG 180)Pitch)) OverHang))
(setq   Plumb(polar OverHang-P1 (d2r (+ ANG90)) Plumb))
)

Andrew1979 发表于 2022-7-6 00:01:08

很高兴得知你自己把它整理好了。
一个好的编程实践是本地化变量,确保它们位于函数的命名空间中,并且不会干扰容器命名空间中具有相同名称的其他变量:
另一个好的做法是指符号命名:为了能够轻松阅读代码,函数通常大写,而变量名以小写字母开头:
4

MSasu 发表于 2022-7-6 00:13:00

也可能是90.0而不是90和180。有时它只是lisp real v的ints中的一个小错误。

BIGAL 发表于 2022-7-6 00:16:36

页: [1]
查看完整版本: 三角帮助