明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2430|回复: 10

已知点表中的两点,求与此两点共线且距离最远的点

[复制链接]
发表于 2009-6-25 12:15:00 | 显示全部楼层 |阅读模式
如下图所示,已知点表,PT1,PT2;求与PT1,PT2共线且距离最远的点pt3,pt4

本帖子中包含更多资源

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

x
发表于 2009-6-25 23:56:00 | 显示全部楼层
Z版的程序似乎角度要加上(/ pi 2)的判断,下面的程序供楼主参考
  1. ;; ▓ (lt:pts-onLine <点列表>)
  2. ;; [功能] 判断点集是否共线
  3. ;; [参数] plst---点列表
  4. ;; [返回] 共线->T,反之->nil
  5. (defun lt:pts-onLine (plst / a b)
  6.    (setq a (car plst) b (cadr plst))
  7.    (not (vl-catch-all-error-p
  8.           (vl-catch-all-apply
  9.             'mapcar (list '(lambda (x / an)
  10.                             (setq an (angle a x))
  11.                             (if (not (or (equal x a 1e-6)
  12.                                          (equal x b 1e-6)
  13.                                          (equal an (angle b x) 1e-6)
  14.                                          (equal an (angle x b) 1e-6)
  15.                                      )
  16.                                 )
  17.                               (exit)
  18.                             )
  19.                            )
  20.                           (cddr plst)
  21.                     )
  22.           )
  23.         )
  24.    )
  25. )
回复 支持 1 反对 0

使用道具 举报

发表于 2009-6-25 14:18:00 | 显示全部楼层

先做直线pl: PT1-PT2

用vlax-curve-getClosestPointTo求其余各点到pl的垂足,如果垂足与本点坐标相同/距离为零 则表示点在线pl上

发表于 2009-6-25 14:48:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-6-25 15:43:00 | 显示全部楼层

怎么判断是否是线上的点呢?

发表于 2009-6-25 15:58:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-6-25 20:52:00 | 显示全部楼层
kry发表于2009-6-25 15:43:00怎么判断是否是线上的点呢?

可通过角度进行判断
(if (equal (- (angle pt1 pt2) (angle pt1 pt4)) 1e-6)
 (princ "\npt4  在线上.")
 (princ "\npt4 不在线上.")
)

发表于 2009-6-26 20:29:00 | 显示全部楼层

角度法,距离法,向量法,辅助线法,垂距法,。。。。。。都可以

不过建议用while循环替代mapcar,效率更高

发表于 2009-6-26 20:46:00 | 显示全部楼层

(vl-catch-all-error-p
           (vl-catch-all-apply
             'mapcar (list '(lambda (x / an)
                             (
setq an (angle a x))
                             (
if (not (or (equal x a 1e-6)
                                          (
equal x b 1e-6)
                                          (
equal an (angle b x) 1e-6)
                                          (
equal an (angle x b) 1e-6)
                                      )
                                 )
                               (
exit)

谢无痕老师指教,红色部分的结构确保在指定条件下退出,和while差不多

发表于 2020-8-20 08:26:21 | 显示全部楼层
如果是空间点怎么判断
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-17 21:29 , Processed in 0.186156 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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