乐筑天下

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

[编程交流] (entmake)3点弧

[复制链接]

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:10:59 | 显示全部楼层 |阅读模式
灵感来源于这条线索:
 
http://www.cadtutor.net/forum/showthread.php?75821-简单的lisp如何删除不必要的步骤单击
 
试图用3个已知点(形成)一条弧
 
P1和p2是终点
 
p3始终位于夹角内的弧上。角度50和51的顺序不对
 
  1. [b][color=BLACK]([/color][/b]defun mid_point [b][color=FUCHSIA]([/color][/b]s e[b][color=FUCHSIA])[/color][/b]
  2.   [b][color=FUCHSIA]([/color][/b]mapcar '[b][color=NAVY]([/color][/b]lambda [b][color=MAROON]([/color][/b]a b[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]* [b][color=GREEN]([/color][/b]+ a b[b][color=GREEN])[/color][/b] 0.5[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] s e[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  3. [b][color=BLACK]([/color][/b]defun c:test [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b]
  5. [b][color=FUCHSIA]([/color][/b]setq p1 [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nArrow Point:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  6. [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b]
  7. [b][color=FUCHSIA]([/color][/b]setq p2 [b][color=NAVY]([/color][/b]getpoint p1 [color=#2f4f4f]"\nText CENter Point:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  8. [b][color=FUCHSIA]([/color][/b]grdraw p1 p2 4 3[b][color=FUCHSIA])[/color][/b]
  9. [b][color=FUCHSIA]([/color][/b]setq p6 [b][color=NAVY]([/color][/b]mid_point p1 p2[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  10. [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b]
  11. [b][color=FUCHSIA]([/color][/b]setq p3 [b][color=NAVY]([/color][/b]getpoint p6 [color=#2f4f4f]"\nARC Direction Point:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  12. [b][color=FUCHSIA]([/color][/b]setq p4 [b][color=NAVY]([/color][/b]mid_point p1 p3[b][color=NAVY])[/color][/b]
  13.        p5 [b][color=NAVY]([/color][/b]mid_point p2 p3[b][color=NAVY])[/color][/b]
  14.        ce [b][color=NAVY]([/color][/b]inters p4 [b][color=MAROON]([/color][/b]polar p4 [b][color=GREEN]([/color][/b]+ [b][color=BLUE]([/color][/b]angle p1 p3[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]* pi 0.5[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b]
  15.                   p5 [b][color=MAROON]([/color][/b]polar p5 [b][color=GREEN]([/color][/b]+ [b][color=BLUE]([/color][/b]angle p2 p3[b][color=BLUE])[/color][/b] [b][color=BLUE]([/color][/b]* pi 0.5[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] 1[b][color=MAROON])[/color][/b] nil[b][color=NAVY])[/color][/b]
  16.        ra [b][color=NAVY]([/color][/b]distance ce p1[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  17. [b][color=FUCHSIA]([/color][/b]grdraw ce p1 1 3[b][color=FUCHSIA])[/color][/b]
  18. [b][color=FUCHSIA]([/color][/b]grdraw ce p2 2 3[b][color=FUCHSIA])[/color][/b]
  19. [b][color=FUCHSIA]([/color][/b]grdraw ce p3 3 3[b][color=FUCHSIA])[/color][/b]
  20. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]
  21. (entmake (list (cons 0 "ARC")
  22.               (cons 10 ce)
  23.               (cons 40 ra)
  24.               (cons 50 (angle ce p1))
  25.               (cons 51 (angle ce p2))
  26. ))

 
从命令行可以很简单
 
  1. (command "_.ARC" "_non" p1 "_non" p3 "_non" p2)

 
有什么建议吗?大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:32:23 | 显示全部楼层
这可能有助于:
 
http://lee-mac.com/3pointarccircle.html
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 07:42:02 | 显示全部楼层
看起来不错。我认为你的p2在LM:3中总是在p1和p3之间,谢谢-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 07:55:55 | 显示全部楼层
 
提供的点可以是任何顺序,但是,产生的弧扫掠的角度将取决于点的排列;为了演示,这里有一个快速示例:
 
 
不客气!
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 08:07:24 | 显示全部楼层
好的,我理解(我想)
 
我的场景是定义端点,第三个点始终在弧上。我倾向于简单的(命令“_.ARC”)没有那么优雅,但很实用。谢谢!-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 08:21:54 | 显示全部楼层
 
 
 
在这种情况下,如果将端点作为“p1”和“p3”参数传递给我的LM:3PArc函数,并将第三个点作为“p2”参数,您应该会收到所需的结果,因为圆弧的计算将始终确保提供的点“p2”位于端点“p1”和“p3”之间。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 10:03 , Processed in 0.477876 second(s), 64 queries .

© 2020-2025 乐筑天下

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