明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 8193|回复: 21

[函数] 通用函数 【点到直线垂足是否在直线上】

[复制链接]
发表于 2014-1-13 10:19:04 | 显示全部楼层 |阅读模式
很简单的班门弄斧之作,送给有需要的朋友,请高手勿见笑。可用来判断点是否在直线端点垂线区间,也就是点到直线垂足是否在直线上。

本帖子中包含更多资源

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

x
发表于 2022-11-1 14:40:00 | 显示全部楼层
highflybir 发表于 2014-1-14 18:47
如果定义了 Line:angle函数

请问有没有纯数学求垂足点代码
发表于 2014-1-13 10:33:58 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2014-1-13 14:16 编辑

可以直接比较pt1和pt2两点误差在合理内就可以了,不求距离更简化
  1. ;;pt到直线(弧)的垂点是否在直线(弧)上 自贡黄明儒
  2. ;;(HH:PtIn (getpoint) (car (entsel)))
  3. (defun HH:PtIn (pt Line)
  4.   (equal (vlax-curve-getClosestPointTo Line Pt t)
  5.    (vlax-curve-getClosestPointTo Line Pt)
  6.    1e-5
  7.   )
  8. )
发表于 2014-1-13 12:24:57 | 显示全部楼层
本帖最后由 qjchen 于 2014-1-13 17:23 编辑

挺好的代码啊,建议代码不长的话,直接贴出代码会否更好些。

假如不考虑直线实体,只考虑 p点投影是否在p1和p2点之间,也可以用trans函数。
(此函数没有考虑 p1与p2同点时的容错)


  1. ;;by qjchen;
  2. (defun p-t(p p1 p2)
  3.   (<= (abs (- (/ (caddr (trans (mapcar '- p p1) 0 (mapcar '- p2 p1))) (distance p1 p2)) 0.5)) (+ 0.5 1e-8))
  4. )


发表于 2014-1-13 13:25:34 | 显示全部楼层
qjchen 发表于 2014-1-13 12:24
挺好的代码啊,建议代码不长的话,直接贴出代码会否更好些。

假如不考虑直线实体,只考虑 p点投影是否在 ...

版主,我怎么测试不对呢?还有加减0.5是什么意思?
发表于 2014-1-13 13:33:35 | 显示全部楼层
to 黄兄,我不是版主啊

(p-t (list 5.5 0 0)(list 5 1 0)(list 6 1 0)) 若在之间,则为T,否则为nil

匆匆写的,不知道有啥错误没有。说不定得修正 .

按道理,在之间的话,trans会得到一个 0-1之间的数,否则是负数或者>1的数,-0.5只是一个取中点比距离的方法。
发表于 2014-1-13 13:50:12 | 显示全部楼层
qjchen 发表于 2014-1-13 13:33
to 黄兄,我不是版主啊

(p-t (list 5.5 0 0)(list 5 1 0)(list 6 1 0)) 若在之间,则为T,否则为 ...

你写的程序一向很牛,我心中一向当你是版主了。你的方法是求的p到p1p2之距离呀
发表于 2014-1-13 17:26:38 | 显示全部楼层
本帖最后由 qjchen 于 2014-1-13 17:32 编辑
自贡黄明儒 发表于 2014-1-13 13:50
你写的程序一向很牛,我心中一向当你是版主了。你的方法是求的p到p1p2之距离呀

不好意思,听了脸红了 ,你上面的代码挺好用的~

太久没编程了,确实是错了,重新修改了一下,做了一下归一化,同时还是得加一点容错的1e-8。

看来得隔段时间编下代码才能不会重新掉到0啊。

黄兄看看这次行否

发表于 2014-1-14 08:14:00 | 显示全部楼层
qjchen 发表于 2014-1-13 17:26
不好意思,听了脸红了 ,你上面的代码挺好用的~

太久没编程了,确实是错了,重新修改了一下,做 ...

你太谦虚和客气了,我们都是读着你的代码慢慢变老的。
现在行了,你使用了除法。前几天我也用了除法编程,出现错误后找来找去。最后的经验是:反是除数是变量的,最好判断一下。下面我不用除法,好象也行
  1.   ;;pt投影到p1p2上的点是否在p1p2之间  自贡黄明儒
  2.   ;;(p-t (getpoint) (getpoint) (getpoint))  
  3.   (defun p-t (p p1 p2)
  4.     (< 0
  5.        (caddr (trans (mapcar '- p p1) 0 (mapcar '- p2 p1)))
  6.        (distance p1 p2)
  7.     )
  8.   )
 楼主| 发表于 2014-1-14 08:55:36 | 显示全部楼层
抛砖引玉最好的诠释,跟各位高手学习了!
发表于 2014-1-14 09:00:44 | 显示全部楼层
自贡黄明儒 发表于 2014-1-14 08:14
你太谦虚和客气了,我们都是读着你的代码慢慢变老的。
现在行了,你使用了除法。前几天我也用了除法编程 ...

:-) 谢谢修改。那我只好说我是看着 eachy和狂刀的代码慢慢变老的了
这个 连< 的方法很好,我没想到。
以前用trans做过一批 面 线 点 的几何题,希望有时间可以整理出来大家一起优化代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 00:43 , Processed in 0.197079 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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