cdma2546 发表于 2014-1-13 10:19:04

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

很简单的班门弄斧之作,送给有需要的朋友,请高手勿见笑。可用来判断点是否在直线端点垂线区间,也就是点到直线垂足是否在直线上。

树櫴希德 发表于 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两点误差在合理内就可以了,不求距离更简化
;;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 12:24:57

本帖最后由 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))
)

自贡黄明儒 发表于 2014-1-13 13:25:34

qjchen 发表于 2014-1-13 12:24 static/image/common/back.gif
挺好的代码啊,建议代码不长的话,直接贴出代码会否更好些。

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

版主,我怎么测试不对呢?还有加减0.5是什么意思?

qjchen 发表于 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 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:26:38

本帖最后由 qjchen 于 2014-1-13 17:32 编辑

自贡黄明儒 发表于 2014-1-13 13:50 static/image/common/back.gif
你写的程序一向很牛,我心中一向当你是版主了。你的方法是求的p到p1p2之距离呀
不好意思,听了脸红了 ,你上面的代码挺好用的~

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

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

黄兄看看这次行否

自贡黄明儒 发表于 2014-1-14 08:14:00

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)
    )
)

cdma2546 发表于 2014-1-14 08:55:36

抛砖引玉最好的诠释,跟各位高手学习了!

qjchen 发表于 2014-1-14 09:00:44

自贡黄明儒 发表于 2014-1-14 08:14 static/image/common/back.gif
你太谦虚和客气了,我们都是读着你的代码慢慢变老的。
现在行了,你使用了除法。前几天我也用了除法编程 ...

:-) 谢谢修改。那我只好说我是看着 eachy和狂刀的代码慢慢变老的了。
这个 连< 的方法很好,我没想到。
以前用trans做过一批 面 线 点 的几何题,希望有时间可以整理出来大家一起优化代码。
页: [1] 2 3
查看完整版本: 通用函数 【点到直线垂足是否在直线上】