找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3429|回复: 14

[选择集] 用数学的方法求点到直线的距离

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-13 21:48:28 | 显示全部楼层 |阅读模式
函数发布
函数名称: XD::Geom:P2L-Dist
调用格式: ( XD::Geom:P2L-Dist pnt p1 p2)
参数说明: pnt --- 线外点
p1 --- 直线点1
p2 --- 直线点2
返回值: 实数, 有正负

(点在线段的左上侧为负值, 在右下侧为正值)。
函数简介: 用数学的方法求点到直线的距离

(点在线段的左上侧为负值, 在右下侧为正值)。
函数来源: 原创
函数作者: Lispboy
适用版本: 不限 
最后更新时间: 2013-06-13
备注: (点在线段的左上侧为负值, 在右下侧为正值)。这个副作用是 这个函数最主要的作用
演示图片: -

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. (defun XD::Geom:P2L-Dist (pnt pt1 pt2 / c1 c2 c3 dis)
  2.   (setq c1 (- (cadr pt2) (cadr pt1))
  3.         c2 (- (car pt1) (car pt2))
  4.         c3 (sqrt (+ (* c1 c1) (* c2 c2)))
  5.         c1 (/ c1 c3)
  6.         c2 (/ c2 c3)
  7.         c3 (/ (- (* (car pt2) (cadr pt1)) (* (car pt1) (cadr pt2))) c3)
  8.         dis (+ (* c1 (car pnt)) (* c2 (cadr pnt)) c3)
  9.   )
  10. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8121个

财富等级: 富甲天下

发表于 2013-6-14 11:44:17 | 显示全部楼层
下面是trans函数的应用:
[pcode=lisp,true]
;;;----------------------------------------------------;
;;;功能: 点到直线的距离(带方向)                      ;
;;;输入: 要求的点Pt,和直线的两个端点P1,P2             ;
;;;输出: 带符号的距离,为正P1,P2,Pt逆时针,否则顺时针  ;
;;;----------------------------------------------------;
(defun LINE:Perpendicular_Distance_2 (pt p1 p2 / )
  (car (trans (mapcar '- pt p1) 0 (mapcar '- p2 p1)))
)
[/pcode]

点评

对直线,说逆时针是不是比较抽象,改上下左右比较好?  详情 回复 发表于 2013-6-14 12:00

评分

参与人数 2D豆 +10 收起 理由
wowan1314 + 5 trans真是个神奇的函数。消化不了。
Lispboy + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

 楼主| 发表于 2013-6-14 12:00:19 | 显示全部楼层
Highflybird 发表于 2013-6-14 11:44
下面是trans函数的应用:

;;;----------------------------------------------------;

对直线,说逆时针是不是比较抽象,改上下左右比较好?

点评

根据测试,高飞鸟的函数只能用顺 逆来表达。再加一句判断p1 p2大小的语句,才能用上下表达。  发表于 2013-6-17 09:27
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-14 16:04:46 来自手机 | 显示全部楼层
左右以前进方向来说更好理解来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2013-6-17 08:12:28 | 显示全部楼层
直线的方向,有点晕!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-11-8 23:54:09 | 显示全部楼层
学习了,非常好,辛苦了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-17 22:21:46 | 显示全部楼层
返回距离和向量可能会更有用途
  1. (defun XD::Pnt:P2L (p p1 p2)
  2.   (list        (car (trans (mapcar '- p p1) 0 (mapcar '- p2 p1)))
  3.         (mapcar        '-
  4.                 (inters        p1
  5.                         p2
  6.                         p
  7.                         (polar p
  8.                                (+ (angle p1 p2) (/ pi 2))
  9.                                1.
  10.                         )
  11.                         nil
  12.                 )
  13.                 p
  14.         )
  15.   )
  16. )

点评

向量最好转成单位向量。  详情 回复 发表于 2013-11-17 23:02
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-11-17 23:02:20 | 显示全部楼层
st788796 发表于 2013-11-17 22:21
返回距离和向量可能会更有用途

向量最好转成单位向量。

点评

转单位向量就不能用于DIM类的MoveStretchPoint了  详情 回复 发表于 2013-11-18 05:53
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-11-18 05:53:20 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2013-11-18 05:55 编辑
newer 发表于 2013-11-17 23:02
向量最好转成单位向量。


仅返回单位向量就不能用于DIM类的MoveStretchPoint了,可以加个 开关是否转换
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-2-15 09:18:29 | 显示全部楼层
直线的方向,有点晕:L:L
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2016-4-13 16:24:45 | 显示全部楼层
学习了....
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2016-11-18 17:01:10 | 显示全部楼层
这个方法很强,我到现在还没理解。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 33个

财富等级: 招财进宝

发表于 2022-6-3 16:30:17 | 显示全部楼层
学习了,谢谢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-22 12:40 , Processed in 0.323157 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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