找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3336|回复: 9

[LISP程序]:判断点表是否共线

[复制链接]
发表于 2005-10-10 12:03:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

  1. ;;;|判断点表是否共线
  2. (defun pd-ptlst-gx (lst / pt1 pt2 x dst1 dst2 pd ang)
  3.   (setq ang (+ (angle (car lst) (cadr lst)) (/ pi 2)))
  4.   (setq        pt2 (polar (setq pt1 (car lst)) ang 1e+3)
  5.         pd  t
  6.   )
  7.   (mapcar
  8.     '(lambda (x)
  9.        (if (not        (equal (distance x pt2)
  10.                        (sqrt (+        (* (setq dst1 (distance x pt1)) dst1)
  11.                                 (* (setq dst2 (distance pt1 pt2)) dst2)
  12.                              )
  13.                        )
  14.                        1e-3
  15.                 )
  16.            )
  17.          (setq pd nil)
  18.        )
  19.      )
  20.     (vl-remove (car lst) lst)
  21.   )
  22.   pd
  23. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-10 21:56:58 | 显示全部楼层

  1.   [FONT=courier new]
  2. ;; xdl-ptsonline 判断点集共线.----by 狂刀.2005.10
  3.   (defun xdl-ptsonline (lst de)
  4. (or
  5.   (< (length lst) 3)
  6.   (not(setq lst (append lst (list (car pts)(cadr pts)))));;修补aeo在3楼提出的bug
  7.   (apply 'and
  8.          (mapcar '(lambda (a b c / ab ac bc)
  9.                     (setq ab (distance a b)
  10.                           ac (distance a c)
  11.                           bc (distance b c)
  12.                     )
  13.                     (equal (* 2 (max ab ac bc)) (+ ab ac bc) de)
  14.                   )
  15.                  lst
  16.                  (cdr lst)
  17.                  (cddr lst)
  18.          )
  19.   ))
  20. )
  21.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-11-6 20:47:26 | 显示全部楼层
最初由 aeo 发布


(xdl-ptsonline '((0. 0. 0.)(1. 1. 0.)(1. 1. 10.)(1. 1. -10.)) 1e-4)
-》 T?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2005-11-7 06:06:40 | 显示全部楼层
aeo 的程序判断是 2D 点,不过点集操作中,无序的点集对 Lisp 处理是没有多少意义的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2005-12-5 23:39:40 | 显示全部楼层

我也贴一个

[PHP](defun radtoang (n)
  (/ (* 180 n) pi)
)
(defun ptsonline (ptlist / angle01 i j yesorno)
  (if (> (setq i (length ptlist))
         2
      )
    (progn
      (setq angle01 (radtoang (angle (nth 0 ptlist) (nth 1 ptlist))))
      (setq j 2)
      (while (< j i)
        (if (or
              (equal (abs (- angle01 (radtoang (angle (nth 0 ptlist)
                                                  (nth j ptlist)
                                           )
                                 )
                      )
                 ) 180 1e-10

              )
              (equal (abs (- angle01 (radtoang (angle (nth 0 ptlist)
                                                  (nth j ptlist)
                                           )
                                 )
                      )
                 ) 0 1e-10

              )
            )
          (setq yesorno t)
          (setq yesorno nil)
        )
        (if yesorno
          (setq j (1+ j))
          (setq j i)
        )
      )
      yesorno
    )   
(princ "\n点集内元素少于3个")
(setq yesorno t)
  )
)[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2006-5-30 09:18:40 | 显示全部楼层
说明第一点与第二点必须s相距0。001以上
[php]
(defun ptlst-gx        (lst / p0 p1 d1 d2 d3 c/2)
  (setq        p0 (car lst)
        p1 (cadr lst)
  )
  (apply 'and
         (mapcar
           '(lambda (n-lst)
              (setq d1        (distance p0 n-lst)
                    d2        (distance p1 n-lst)
                    d3        (distance p0 p1)
                    c/2        (/ (+ d1 d2 d3) 2)
              )
              (equal (* (- c/2 d1) (- c/2 d2) (- c/2 d3)) 0 0.0001)
            )
           (cddr lst)
         )
  )
)
[/php]

测试:
[php]
                                        ;2d点
(ptlst-gx
  (list '(0.0 0.0) '(1.0 1.0) '(2.0 2.0))
)
                                        ;2d+3d点
(ptlst-gx
  (list '(0.0 0.0 0.0) '(1.0 1.0 0.0) '(2.0 2.0))
)
                                        ;3d点
(ptlst-gx
  (list '(0.0 0.0 0.0) '(1.0 1.0 1.0) '(2.0 2.0 2.0))
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-6-16 16:20:46 | 显示全部楼层
我的看法:

对于多段线中有弧度组成部分的情况,虽然各节点都在一条直线上,但是多段线整体并不在一条直线上。所以上面各程序只能用于判断点表是否共线,并不能判别多段线在一条直线上。若要判别多段线是否在一条直线上,唯有用面积是否为零来判别。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-9-25 20:48:45 | 显示全部楼层
对于多段线中有弧度组成部分的情况,虽然各节点都在一条直线上,但是多段线整体并不在一条直线上。所以上面各程序只能用于判断点表是否共线,并不能判别多段线在一条直线上。若要判别多段线是否在一条直线上,唯有用面积是否为零来判别。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2018-5-6 10:12:37 | 显示全部楼层
谢谢分享,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2018-5-7 00:19:45 | 显示全部楼层
不错的函数!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:23 , Processed in 0.338478 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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