找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1258|回复: 16

[求助] [求助]:帮帮我,论坛上搜不出:如何求点到直线的距离

[复制链接]
发表于 2004-9-14 08:34:23 | 显示全部楼层 |阅读模式

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

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

×
在日常工作中遇到一个问题:已知三点,求其中一点到另外两点所在直线的距离,谁知道怎样解决?帮帮我吧。谢谢了,先!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2004-9-14 09:40:42 | 显示全部楼层
REFER TO:
点到任意曲线距离
[php]
(defun c:test ()
  (setq p (getpoint "\nPick point: "))
  (setq l (car (entsel "\nSelect line: ")))
  (dispt2cur p c)
)
(defun dispt2cur (p c)
  (distance p (vlax-curve-getclosestpointto
                (vlax-ename->vla-object l)
                (trans p 1 0)
                acExtendBoth)
              )
)

如果已知三点:
(defun dispt2line (p p1 p2)
  (distance p (inters p1 p2 p (polar p (+ (angle p1 p2)(/ pi 2)) 1) nil))
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 11303个

财富等级: 富甲天下

发表于 2004-9-14 11:00:26 | 显示全部楼层
已知三点,求第一点到另外两点所在直线的距离。程序如下:
(DEFUN DIST3P (P P1 P2)
(SETQ AN1 (ANGLE P1 P2)  AN2 (ANGLE P1 P))
(SETQ ANG (IF (> AN1 AN2) (- AN1 AN2) (- AN2 AN1)))
(* (DISTANCE P1 P) (SIN ANG))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-14 15:07:08 | 显示全部楼层
谢谢各位,发贴后和朋友们讨论,也有人说用楼上朋友的做法,但,我觉得还是用余弦定理求出角度比较安全(程序的适用性)。不过,还是谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-14 21:09:41 | 显示全部楼层
贴一段eachy版主以前写的代码


  1. ;;by eachy
  2. ;;; 返回点到直线距离
  3. ;;;返回值:点到直线的距离,点在线段的左(上)侧为负值, 在右(下)侧为正值。;
  4. ;;;方向根据给定的起始点和终止点定。
  5. ;;; Request distance from a point(p0) to a line(p1 p2).
  6. ;ea (ptoln (getpoint)(getpoint)(getpoint))
  7. (defun ptoln (p0 p1 p2 / x1 y1 x2 y2 c1 c2 c3)
  8.   (setq    x1 (car p1)
  9.     y1 (cadr p1)
  10.     x2 (car p2)
  11.     y2 (cadr p2)
  12.     c1 (- y2 y1)
  13.     c2 (- x1 x2)
  14.     c3 (- (* x2 y1) (* x1 y2))
  15.   )
  16.   (/ (+ (* c1 (car p0)) (* c2 (cadr p0)) c3)
  17.      (sqrt (+ (* c1 c1) (* c2 c2)))
  18.   )
  19. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-15 04:24:23 | 显示全部楼层
Try this:
[php]
(defun c:test ()
  (setq p (getpoint "\nPick point: "))
  (setq l (entsel "\nselect line: "))
  (distance p (osnap (cadr l) "Per"))
)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-9-15 17:36:12 | 显示全部楼层

这个就不用编程了吧

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

使用道具 举报

 楼主| 发表于 2004-9-15 17:42:10 | 显示全部楼层
9楼朋友:我就是在程序中使用的,不是直接画图,这样就提出了适用性的要求,也就是不管是什么位置关系都能成立,即便是象xy轴这样的特殊位置

刚才研究了一下,6楼引用的eachy斑竹的autolisp程序是经典的点到直线距离的公式映射,太好了!!!

还有就是既然eachy斑竹给上面3楼的vlisp程序(我看不懂,^_^)加分了,那肯定也是经典之作了,谢谢!!!

经典的点到直线距离的公式可以看这里:
http://www.hzgz.net/lgq/lunwen/ddzxdjlgsdwztd/ddzxdjlgsdwztd.htm
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2004-9-20 15:41:59 | 显示全部楼层
我已经将上述知识应用到我自己的程序中了,谢谢各位的参与
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-10-2 16:30:11 | 显示全部楼层
最初由 PFD8667 发布
[B]请教6楼楼主,该程序命令是什么? [/B]


程序中已经写的很清楚,这是个函数,不是命令
调用方式:(ptoln (getpoint)(getpoint)(getpoint))

如果做成命令,可以这样:

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

使用道具 举报

 楼主| 发表于 2004-10-3 08:39:08 | 显示全部楼层
楼上的斑竹大人:(defun c:ptoln ()和(defun ptoln () 会发生冲突么?我现在在办公室,这里没有cad,不能试验。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 11:53 , Processed in 0.269878 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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