乐筑天下

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

[编程交流] 距离在LIS中的应用

[复制链接]

60

主题

149

帖子

90

银币

后起之秀

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

铜币
300
发表于 2022-7-6 10:47:48 | 显示全部楼层 |阅读模式
你好
 
我有一个小项目,我想创建一个命令,自动确定之间的距离。在一条线上取两个点,然后将结果除以350。如果结果是4.3或4.5,我将其四舍五入到更高的数字,即5(2.3>>4,3.2>>4等),并用该圆形数字分割该线。最后,我必须放置水平线,例如300mm。沿着这些点的长中点。
 
关于距离,我从这个论坛上收集了以下信息:
 
(setq pt1(getpoint“\n点击第一个点”))
(setq pt2(getpoint“\n点击第二个点”))
(setq dist(距离pt1 pt2))
 
以上似乎是明显和正确的。然后如何使用和应用我从上面的程序中获得的dist值。
 
非常感谢你。
 
尼古拉斯。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 10:53:58 | 显示全部楼层
你好
 
你可以试试我为你做的这个。
  1. (defun c:try (/ pt1 pt2 dist absLen Lens Line)
  2. (setq pt1 (getpoint "\nPick First Point")
  3.        pt2 (getpoint "\nPick Second Point")
  4.        dist (distance pt1 pt2)
  5. absLen (abs dist)
  6. )
  7. (setq Lens(getint "\nEnter Number to divide on :")
  8.         )  
  9. (setvar 'pdmode 66)
  10. (vl-cmdf "_.line" pt1 pt2 "")
  11. (setq Line (entlast))
  12. (vl-cmdf "_.divide" Line Lens
  13.    "_.erase" Line "")
  14. (princ)
  15. )

 
当做
 
塔瓦特
回复

使用道具 举报

60

主题

149

帖子

90

银币

后起之秀

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

铜币
300
发表于 2022-7-6 10:58:11 | 显示全部楼层
非常感谢你。该程序确实将该行除以我输入的数字。然而,这个计划有点不同。
 
我想得到距离(绝对值),然后除以350。数字应该四舍五入(即,如果答案是2,则可以,但如果是2.1,则应四舍五入到3或2.5到3或2.6到3等)。
 
有了这个数字,我可以将原始线除以它,然后放置一条300mm的水平线。沿点(pdmode 66)
 
希望收到您的来信,
 
尼古拉斯。
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 11:04:16 | 显示全部楼层
汇总
  1. (if (not
  2. (zerop (rem dist 1.0)))
  3. (setq dist (1+ (fix dist))))
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 11:06:45 | 显示全部楼层
你好
 
有些修改,但您的选择必须从左到右开始。
  1. (defun c:try (/ pt1 pt2 dist absLen Lens Line)
  2. (setq pt1 (getpoint "\nPick First Point")
  3.        pt2 (getpoint "\nPick Second Point")
  4.        dist (distance pt1 pt2)
  5. fixDist (fix dist)
  6. fixPT2 (list (+ (car pt1) fixDist)
  7.              (cadr pt1))
  8. )
  9. (setq Lens(getint "\nEnter Number to divide on :")
  10.         )  
  11. (setvar 'pdmode 66)
  12. (vl-cmdf "_.line" pt1 fixPT2 "")
  13. (setq Line (entlast))
  14. (vl-cmdf "_.divide" Line Lens
  15.    "_.erase" Line "")
  16. (princ)
  17. )

 
当做
 
塔瓦特
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:12:21 | 显示全部楼层
 
  1. (fix (+ 0.5 x))

 
要解释消极因素:
 
  1. (fix (+ x (/ (abs x) x 2.)))
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 11:13:51 | 显示全部楼层
 
  1. (float (fix (+ 0.5 x)))
回复

使用道具 举报

4

主题

940

帖子

961

银币

初来乍到

Rank: 1

铜币
12
发表于 2022-7-6 11:20:16 | 显示全部楼层
我认为OP需要将任何大于0的小数四舍五入为整数。Abs不是必需的,因为变量是从距离函数中获得的。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:25:48 | 显示全部楼层
 
没错,TWA只是为了完整性
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 11:26:26 | 显示全部楼层
在这里,它再次出现,但在另一种技术和绝对值。。。。
  1. (defun c:try (/ pt1 pt2 dist absLen Lens Line)
  2. (setq pt1 (getpoint "\nPick First Point")
  3.        pt2 (getpoint "\nPick Second Point")
  4.        dist (distance pt1 pt2)
  5.    fixDist (float (fix (+ 0.5 dist)))
  6.    fixPT2 (list (+ (car pt1) fixDist)
  7.             (cadr pt1))
  8.    )
  9.   (setq Lens(getint "\nEnter Number to divide on :")
  10.        )  
  11. (setvar 'pdmode 66)
  12. (vl-cmdf "_.line" pt1 fixPT2 "")
  13. (setq Line (entlast))
  14. (vl-cmdf "_.divide" Line Lens
  15.       "_.erase" Line "")
  16. (princ)
  17. )

我希望这符合你的需要。。。。。
 
当做
 
塔瓦特
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 00:29 , Processed in 1.059430 second(s), 72 queries .

© 2020-2025 乐筑天下

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