通用函数 【点到直线垂足是否在直线上】
很简单的班门弄斧之作,送给有需要的朋友,请高手勿见笑。可用来判断点是否在直线端点垂线区间,也就是点到直线垂足是否在直线上。highflybir 发表于 2014-1-14 18:47
如果定义了 Line:angle函数
请问有没有纯数学求垂足点代码 本帖最后由 自贡黄明儒 于 2014-1-13 14:16 编辑
可以直接比较pt1和pt2两点误差在合理内就可以了,不求距离更简化
;;pt到直线(弧)的垂点是否在直线(弧)上 自贡黄明儒
;;(HH:PtIn (getpoint) (car (entsel)))
(defun HH:PtIn (pt Line)
(equal (vlax-curve-getClosestPointTo Line Pt t)
(vlax-curve-getClosestPointTo Line Pt)
1e-5
)
) 本帖最后由 qjchen 于 2014-1-13 17:23 编辑
挺好的代码啊,建议代码不长的话,直接贴出代码会否更好些。
假如不考虑直线实体,只考虑 p点投影是否在p1和p2点之间,也可以用trans函数。
(此函数没有考虑 p1与p2同点时的容错)
;;by qjchen;
(defun p-t(p p1 p2)
(<= (abs (- (/ (caddr (trans (mapcar '- p p1) 0 (mapcar '- p2 p1))) (distance p1 p2)) 0.5)) (+ 0.5 1e-8))
)
qjchen 发表于 2014-1-13 12:24 static/image/common/back.gif
挺好的代码啊,建议代码不长的话,直接贴出代码会否更好些。
假如不考虑直线实体,只考虑 p点投影是否在 ...
版主,我怎么测试不对呢?还有加减0.5是什么意思? to 黄兄,我不是版主啊
(p-t (list 5.5 0 0)(list 5 1 0)(list 6 1 0)) 若在之间,则为T,否则为nil
匆匆写的,不知道有啥错误没有。说不定得修正 .
按道理,在之间的话,trans会得到一个 0-1之间的数,否则是负数或者>1的数,-0.5只是一个取中点比距离的方法。 qjchen 发表于 2014-1-13 13:33 static/image/common/back.gif
to 黄兄,我不是版主啊
(p-t (list 5.5 0 0)(list 5 1 0)(list 6 1 0)) 若在之间,则为T,否则为 ...
你写的程序一向很牛,我心中一向当你是版主了。你的方法是求的p到p1p2之距离呀 本帖最后由 qjchen 于 2014-1-13 17:32 编辑
自贡黄明儒 发表于 2014-1-13 13:50 static/image/common/back.gif
你写的程序一向很牛,我心中一向当你是版主了。你的方法是求的p到p1p2之距离呀
不好意思,听了脸红了 ,你上面的代码挺好用的~
太久没编程了,确实是错了,重新修改了一下,做了一下归一化,同时还是得加一点容错的1e-8。
看来得隔段时间编下代码才能不会重新掉到0啊。
黄兄看看这次行否
qjchen 发表于 2014-1-13 17:26 static/image/common/back.gif
不好意思,听了脸红了 ,你上面的代码挺好用的~
太久没编程了,确实是错了,重新修改了一下,做 ...
你太谦虚和客气了,我们都是读着你的代码慢慢变老的。
现在行了,你使用了除法。前几天我也用了除法编程,出现错误后找来找去。最后的经验是:反是除数是变量的,最好判断一下。下面我不用除法,好象也行
;;pt投影到p1p2上的点是否在p1p2之间自贡黄明儒
;;(p-t (getpoint) (getpoint) (getpoint))
(defun p-t (p p1 p2)
(< 0
(caddr (trans (mapcar '- p p1) 0 (mapcar '- p2 p1)))
(distance p1 p2)
)
) 抛砖引玉最好的诠释,跟各位高手学习了! 自贡黄明儒 发表于 2014-1-14 08:14 static/image/common/back.gif
你太谦虚和客气了,我们都是读着你的代码慢慢变老的。
现在行了,你使用了除法。前几天我也用了除法编程 ...
:-) 谢谢修改。那我只好说我是看着 eachy和狂刀的代码慢慢变老的了。
这个 连< 的方法很好,我没想到。
以前用trans做过一批 面 线 点 的几何题,希望有时间可以整理出来大家一起优化代码。