乐筑天下

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

[编程交流] 检查点是否为直线

[复制链接]

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:10:04 | 显示全部楼层 |阅读模式
你能帮我检查多点是否在一条直线上(全方向)的最快方法吗?。我只是认为idea用x,y计算k,并检查循环三点配对,但它可能太慢了
(很抱歉我的英语不好)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-6 09:18:59 | 显示全部楼层
你好
 
选择一条线,例程将选择位于所选线上的所有点。
 
  1. (defun c:test (/ e ent lst i ss ents)
  2. ;; Tharwat 13. 07. 2011
  3. (if
  4.    (and
  5.      (setq e (car (entsel "\n Select a Line :")))
  6.      (eq (cdr (assoc 0 (setq ent (entget e)))) "LINE")
  7.    )
  8.     (progn
  9.       (setq
  10.         lst (ssget "_f"
  11.                    (list (cdr (assoc 10 ent)) (cdr (assoc 11 ent)))
  12.             )
  13.       )
  14.       (repeat (setq i (sslength lst))
  15.         (setq ss (ssname lst (setq i (1- i))))
  16.         (setq ents (entget ss))
  17.         (if (not (eq (cdr (assoc 0 ents)) "POINT"))
  18.           (ssdel ss lst)
  19.         )
  20.       )
  21.     )
  22.     (princ)
  23. )
  24. (if lst
  25.    (sssetfirst
  26.      nil
  27.      lst
  28.    )
  29. )
  30. (princ)
  31. )

 
塔瓦特
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:21:43 | 显示全部楼层
  1. ;;;++++++++++ 3D Is Point On Line ++++++++++++++++++++++++++++++++++++++
  2. ;;;ARG -> TestPt LinePt1 LinePt2 Fuzz
  3. ;;;RET T nil
  4. (defun is_pt_online (pt l1 l2 fz)
  5. (equal (distance l1 l2)
  6.         (+ (distance l1 pt)
  7.            (distance l2 pt)) fz))

 
-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:28:32 | 显示全部楼层
几何函数
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:30:02 | 显示全部楼层
谢谢大家,很高兴得到帮助^
@塔瓦:很抱歉我的英语不好,所以我越来越难描述,这可能会造成误解^我没有重点,只是要检查一下
@大卫:这就像是登记一段时间。如果pt仍然在线,但超出了l1-l2(l1-l2的延伸)又如何?因此,我将添加更多条件^^
@李:哦,说声谢谢,然后抄下来。我喜欢LM:ListCollinar-p,但它更难理解(对我来说^^)
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:36:57 | 显示全部楼层
  1. ;;;Are Points CoLinear
  2. ;;;ARG -> 3 Points and Fuzz
  3. ;;;RET -> T nil
  4. (defun is_pt_colinear (p1 p2 p3 fz)
  5. (or (equal (distance p1 p3)
  6.             (+ (distance p1 p2)
  7.                (distance p2 p3)) fz)
  8.      (equal (distance p1 p2)
  9.             (+ (distance p1 p3)
  10.                (distance p3 p2)) fz)
  11.      (equal (distance p2 p3)
  12.             (+ (distance p1 p2)
  13.                (distance p1 p3)) fz)))

-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:40:45 | 显示全部楼层
 
不客气。
 
快速解释我的共线谓词函数:LM:Collinar-p使用三角形不等式来测试三个点的共线性,LM:ListCollinar-p使用两个共线单位向量之间的向量点积等于+/-1的事实。
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:43:16 | 显示全部楼层
李^^^(链接非常有用)
 
啊,我刚刚写了一个(对我来说)更简单的共线,但我不确定它是否正确。请推荐帮助我
  1. (defun ST:Geo-Linear (p1 p2 p3 fuzz)
  2. ((lambda ( a b )
  3.    (or
  4.        (equal (abs (- a b)) pi fuzz)
  5.        (equal (abs (- a b)) 0 fuzz)
  6.    )
  7.    )
  8.    (angle p1 p2)(angle p1 p3)
  9. ))
  10. (defun ST:Geo-ListLinear (lst / tmp)
  11. (setq i 2)
  12. (cond ((and (= (length lst) 3)(ST:Geo-Linear(car lst)(cadr lst)(caddr lst) 1e-)(setq tmp T))
  13.        (T (while (and (< i (1- (length lst)))
  14.                (setq tmp (ST:Geo-Linear (nth 0 lst)(nth 1 lst) (nth (setq i (1+ i)) lst) 1e-))
  15.                tmp
  16.            )
  17.        )
  18. )
  19. tmp
  20. )

当它发现三点不“一致”时,原因函数将立即停止,所以我认为它会更快一些
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 09:47:47 | 显示全部楼层
角度功能将测量UCS平面X轴的角度。
回复

使用道具 举报

22

主题

326

帖子

185

银币

后起之秀

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

铜币
243
发表于 2022-7-6 09:54:19 | 显示全部楼层
我想了想,但我想(不确定)如果只比较角度可能没有问题。如果它是线性的,当X轴改变时,直线上3点的差仍然等于0或pi(我不确定)。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 05:11 , Processed in 0.613359 second(s), 72 queries .

© 2020-2025 乐筑天下

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