明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2096|回复: 3

获取两个二维点表的所有交点(非vla-IntersectWith)

[复制链接]
发表于 2018-1-7 05:01:23 | 显示全部楼层 |阅读模式
本帖最后由 lishucheng96 于 2018-1-31 16:57 编辑

;;说明:得到两个二维点表的交点
;;用非vla-IntersectWith方法不生成对象写的点表交点函数,可选多种延长方向,两点表都可以选择是否双向延长还是各自单向延长
;;参数:lst1:点表1
;;参数:lst2:点表2
;;参数:typ:延长类型(不区别大小写):"0000"或其他—两个都不延长;"0001"—延长点表2右侧两个点; "0010"—延长点表2左侧两个点; "0011"—延长点表2两侧两个点; "1000"—延长点表1左侧两个点; "0100"—延长点表1右侧两个点;"1100"—延长点表1两侧两个点;"1111"—延长点表1和点表2两侧两个点;
;;返回:符合条件的包括所有交点的二维点表
;;示例
  ;(setq lst1 (list (list 1492.5310 356.4799) (list 1693.9629 457.0300) (list 2085.9058 466.7216) (list 2281.2705 367.3829)))
        ;(setq lst2 (list (list 1567.8204 362.9696) (list 1667.2671  324.9823) (list 1980.3360 258.3527) (list 2205.2348 357.8477)))
        ;(setq typ "0011")
  ;(Intpt_2lsts lst1 lst2 typ)
  ;((1532.53 376.449) (2255.92 380.272))
  1. (defun Intpt_2lsts(lst1 lst2 typ / ii jj pt1 pt2 pt3 pt4 azi intpt interpt)
  2.    (setq ii (length lst1))
  3.    (setq jj (length lst2))
  4.   ;延长lst1左侧
  5.   (if (= (substr typ 1 1) "1")
  6.     (progn
  7.      (setq pt1 (nth 0 lst1))
  8.      (setq pt2 (nth 1 lst1))
  9.      (setq azi (angle pt1 pt2))
  10.      (setq azi (+ pi azi))
  11.      (setq lst1 (append (list (polar pt1 azi 10000) ) lst1 ))
  12.     )
  13.   )
  14.   ;延长lst1右侧
  15.   (if (= (substr typ 2 1) "1")
  16.     (progn
  17.      (setq pt1 (nth (1- ii) lst1))
  18.      (setq pt2 (nth ii lst1))
  19.      (setq azi (angle pt1 pt2))
  20.      (setq lst1 (append lst1 (list (polar pt2 azi 10000) ) ))
  21.     )
  22.   )
  23.   ;延长lst2左侧
  24.   (if (= (substr typ 3 1) "1")
  25.     (progn
  26.      (setq pt3 (nth 0 lst2))
  27.      (setq pt4 (nth 1 lst2))
  28.      (setq azi (angle pt3 pt4))
  29.      (setq azi (+ pi azi))
  30.      (setq lst2 (append (list (polar pt3 azi 10000) ) lst2 ))
  31.     )
  32.   )
  33.   ;延长lst2右侧
  34.   (if (= (substr typ 4 1) "1")
  35.     (progn
  36.      (setq pt3 (nth (1- jj) lst2))
  37.      (setq pt4 (nth jj lst2))
  38.      (setq azi (angle pt3 pt4))
  39.      (setq lst2 (append lst2 (list (polar pt4 azi 10000) ) ))
  40.     )
  41.   )
  42.   ;计算交点坐标
  43.    (setq ii (1- (length lst1)))
  44.    (setq jj (1- (length lst2)))
  45.    (setq intpt nil interpt nil i 0 )
  46.    (while (< i ii)
  47.      (setq pt1 (nth i lst1))
  48.      (setq pt2 (nth (1+ i) lst1))
  49.      (setq j 0)
  50.      (while (< j jj)
  51.        (setq pt3 (nth j lst2))
  52.        (setq pt4 (nth (1+ j) lst2))
  53.        (setq intpt (inters pt1 pt2 pt3 pt4 t) )
  54.        (if (/= intpt nil)
  55.            ;将交点坐标存入点表
  56.            (setq interpt (append interpt (list intpt)))
  57.        )
  58.        (setq j (1+ j))
  59.      )
  60.      (setq i (1+ i))
  61.    )
  62. interpt
  63. )


发表于 2020-3-7 11:05:48 | 显示全部楼层
支持一下楼主大作
发表于 2022-11-28 18:45:24 | 显示全部楼层
不错,谢谢楼主,正好需要用到
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 06:46 , Processed in 0.178946 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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