乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 58|回复: 11

[编程交流] Lisp程序未完成

[复制链接]

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 11:00:16 | 显示全部楼层 |阅读模式
你好
我做了这个简单的Autolisp程序,但它并没有完成这个姿势。
可能是由于角度错误(72)。或该线的长度(125.873)。
注意:在执行程序后,请注意起点和终点没有连接。。。。为什么?
  1. (defun c:ax (/ p1 p2 p3 p4 p5  oldsnap oldortho newortho)
  2. (setq small 38)
  3. (setq pcs1 (getdist"\nLength of First peice: "))
  4. (setq p1 (getpoint"\nSpecify the start point of peice:"))
  5. (setq p2 (polar p1 (DTR 270) 120))
  6. (setq p3 (polar p2 (DTR 0)(- pcs1 small)))
  7. (setq p4 (polar p3 (DTR [color="red"]72[/color]) [color="Red"]125.873[/color]))
  8. (setq p5 (polar p4 (DTR 180) pcs1))
  9. (setq oldsnap (getvar "osmode"))
  10. (setq oldortho (getvar "orthomode"))
  11. (setq newsnap (setvar "osmode" 0))
  12. (setq newortho (setvar "orthomode" 0))
  13. (command "_pline" p1 "_w" 0 0 p2 p3 p4 p5 "")   
  14. (setvar "osmode" oldsnap)
  15. (setvar "orthomode" oldortho)
  16. (princ "Made by Tharwat")
  17. (princ))
  18. ;++++++++++++ degree to radians ++++++++++++
  19. (defun DTR (ang)(* pi (/ ang 180.0)))

非常感谢您的帮助。。。
谢谢
 
塔瓦特
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 11:11:15 | 显示全部楼层
姿势应如下图所示:
看见
120022zsjimhhxs4h9x1lm.jpg
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:13:01 | 显示全部楼层
我只能评论你的三角学,而不是Lisp程序。
 
你的72角并不精确,无论如何应该是(72+180)。
 
为什么不从下一行的右端开始lisp绘图?然后lisp将绘制600线、120线和638线。然后用“c”选项关闭多段线。在这种情况下,你不必计算出尴尬的角度。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:19:01 | 显示全部楼层
我对你的代码做了一些修改——总是尝试计算你的值,而不是内置它来提高精度。
 
  1. (defun c:ax( / p1 p2 p3 p4 p5 small height SlopeLength SlopeAngle oldsnap )
  2. (setq small  38.0
  3.       height 120.0)
  4. (setq pcs1 (getdist"\nLength of First piece: "))
  5. (setq p1 (getpoint"\nSpecify the start point of piece:"))
  6. (setq p2 (polar p1 (DTR 270) height))
  7. (setq p3 (polar p2 0.0       (- pcs1 small)))
  8. (setq SlopeLength (sqrt (+ (expt small 2) (expt height 2)))
  9.       SlopeAngle  (atan (/ height small)))
  10. (setq p4 (polar p3 SlopeAngle SlopeLength))
  11. (setq p5 (polar p4 pi pcs1))
  12. (setq oldsnap (getvar "osmode"))
  13. (setvar "osmode" 0)
  14. (command "_pline" p1 "_w" 0 0 p2 p3 p4 p5 "")   
  15. (setvar "osmode" oldsnap)
  16. (princ "Made by Tharwat")
  17. (princ)
  18. )
  19. ;++++++++++++ degree to radians ++++++++++++
  20. (defun DTR (ang)(* pi (/ ang 180.0)))

 
当做
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 11:23:19 | 显示全部楼层
非常感谢msasu,太棒了。
 
您确实重新计算了角度值,并为高度指定了一个值。尽管如此,我还是手动计算了角度值,并在代码中插入了该值。
 
既然这些值也正确,为什么Autocad不能正确理解或执行?
 
我希望你能给我解释一下。
 
非常感谢你。
塔瓦特
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 11:32:40 | 显示全部楼层
不客气!
 
这种差距是因为使用手动计算/舍入的值无法获得足够的精度:例如,坡度部分的角度为72.42874。。。而不是72度。
 
当做
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 11:35:00 | 显示全部楼层
 
首先感谢您的回复。
 
关于你的问题。这种处理Autolisp的方法是完全错误的,它是一种非常先进的方法,但向后而不是向前。
 
这就是为什么。
塔瓦特
回复

使用道具 举报

8

主题

1133

帖子

1164

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 11:43:15 | 显示全部楼层
 
事实上,我建议你可以计算p4,从p1开始,在0的方位上取600。在评估了p1、p2、p3和p4之后,您不需要p5,反正p5应该与p1相同。然后,多段线的绘制是完全独立的命令,不必从p1开始,它可以从p4开始,然后当到达p3时,用“c”选项闭合该线。
 
那么你就不需要用一个不可靠的长度和一个不可靠的方向来计算p4,你的p5是错误的,因为它是从p4推导出来的。我不确定我的逻辑出了什么问题,但也许你不理解我,我对Autolisp了解得足够多,以至于无法理解一些简单的错误计算。
 
无论如何,你有一些有效的东西,这就是一切。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:47:09 | 显示全部楼层
 
我完全不同意——埃尔登的方法要简单得多:
 
  1. (defun c:test ( / delt hgt l pt p1 )
  2. (setq delt 38. hgt 120.)
  3. (if (and (setq l  (getdist "\nSpecify Length: "))
  4.           (setq pt (getpoint "\nPick Insertion: ")))
  5.       
  6.    (LWPoly (list (polar pt 0 l) pt (setq p1 (polar pt (/ pi 2.) hgt))
  7.                  (polar p1 0 (+ l delt))) 1)
  8. )
  9. (princ)
  10. )
  11. (defun LWPoly ( lst cls )
  12. (entmakex (append (list (cons 0 "LWPOLYLINE")
  13.                          (cons 100 "AcDbEntity")
  14.                          (cons 100 "AcDbPolyline")
  15.                          (cons 90 (length lst))
  16.                          (cons 70 cls))
  17.                    (mapcar (function (lambda ( p ) (cons 10 p))) lst))))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-6 11:54:33 | 显示全部楼层
Hi Eldon。
感谢您的第二次回复,并尽最大努力提供帮助。
 
你的观点没有错,但不能发展那么多。我从你第一次给我写信时就明白了你的意思,因为我刚开始写的这些代码是一个大型Lisp程序的一部分。
 
所以你的想法真的很聪明,但对于唯一的工具或一个简单的姿势。
 
我真的很喜欢你那种表达想法的技巧。。。真的
 
致以最良好的问候,
 
塔瓦特
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 11:34 , Processed in 0.411647 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表