明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1246|回复: 3

请问用lisp怎么求两个线段的交角

[复制链接]
发表于 2005-11-2 15:59 | 显示全部楼层 |阅读模式

谢谢

发表于 2005-11-2 20:56 | 显示全部楼层
程序:
  1. ;求两直线的最小夹角 ZZXXQQ 2005.11.2
  2. (DEFUN C:2LA (/ GETLINE S S2 EN1 EN2 P1 P2 P3 P4 P5 PT1 PT2 AN1 AN2 ANG)
  3. (DEFUN GETLINE (MSG / A1)
  4.   (INITGET 1)
  5.   (SETQ A1 (CAR (ENTSEL MSG)))
  6.   (WHILE (/= (CDR (ASSOC 0 (ENTGET A1))) "LINE")
  7.    (PRINC "\n您选的不是线图元,请再选一次...")
  8.    (INITGET 1)
  9.    (SETQ A1 (CAR (ENTSEL MSG)))
  10.   )
  11.   A1
  12. )
  13. (SETVAR "CMDECHO" 0)
  14. (SETQ S1 (GETLINE "\nSelect first Line :")
  15.        S2 (GETLINE "\nSelect second Line :")
  16.        EN1 (ENTGET S1) P1 (CDR (ASSOC 10 EN1)) P2 (CDR (ASSOC 11 EN1))
  17.        EN2 (ENTGET S2) P3 (CDR (ASSOC 10 EN2)) P4 (CDR (ASSOC 11 EN2)))
  18. (IF (SETQ P5 (INTERS P1 P2 P3 P4 nil)) (PROGN
  19.   (SETQ PT1 (IF (< (DISTANCE P1 P5) (DISTANCE P2 P5)) P2 P1)
  20.         PT2 (IF (< (DISTANCE P3 P5) (DISTANCE P4 P5)) P4 P3)
  21.         AN1 (ANGLE P5 PT1) AN2 (ANGLE P5 PT2)
  22.         AN1 (IF (> AN1 PI) (- AN1 PI PI) AN1)
  23.         AN2 (IF (> AN2 PI) (- AN2 PI PI) AN2)
  24.         ANG (- (MAX AN1 AN2) (MIN AN1 AN2)))
  25.   (PRINC "\nLine angle is : ")
  26.   (PRINC (* (/ ANG PI) 180))
  27.   (PRINC " DEG")
  28. ))
  29. (SETVAR "CMDECHO" 1)
  30. (PRINC)
  31. )
复制代码
发表于 2005-11-3 02:35 | 显示全部楼层
  1. (load "xyp_lib")
  2. ;|加载通用函数(可在签名栏直接下载)
  3. 如果已经下载xyp_lib并放到搜索路径下可以不再下载!
  4. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  5. ★1·在acad.lsp中增加(load"xyp_lib")
  6. ■2·在每个程序内增加(load"xyp_lib")
  7. ■3·在command下,输入(load"xyp_lib")
  8. ■4·在菜单.mnl中增加(load"xyp_lib")
  9. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  10. [COLOR=red] ★通用函数下载地址:[/COLOR]
  11. [url]http://www.xdcad.net/forum/attachment.php?s=&postid=1606661[/url]
  12. |;
  13. ;;;求两直线的最小夹角
  14. (defun c:test ()
  15.   (setq s1 (usel1 0 "LINE""LINE线1")
  16. s2 (usel1 0 "LINE""LINE线2")
  17. ang1(xyp-get-AngleAtPoint (car s1) (osnap (cadr s1) "near"))
  18. ang2(xyp-get-AngleAtPoint (car s2) (osnap (cadr s2) "near"))
  19.   )
  20.   (princ"\n两直线最小夹角 = ")
  21.   (princ (abs(-(rem (abs(rad2ang(- ang1 ang2)))90.0)90)))
  22.   (princ)
  23. )
发表于 2005-11-3 14:55 | 显示全部楼层

 (princ (abs(-(rem (abs(rad2ang(- ang1 ang2)))90.0)90)))

是不是有点问题?

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

本版积分规则

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

GMT+8, 2024-5-20 14:35 , Processed in 0.216886 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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