找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2005|回复: 11

[工具] 点到直线的距离

[复制链接]
发表于 2017-6-20 20:02:42 | 显示全部楼层 |阅读模式
  • 插件名称 : 点到直线的距离
  • 作  者 : 老仓测绘上班记
  • 运行环境 :不限 
  • 发布时间 :2017-06-20
  • 命令名称 :ddzx
  • 插件介绍 :计算点到选取两点直线的距离
  • 备  注 : (点击图片可以放大)
(点击图片可以放大)

晓东温馨提示 1、运行环境为 晓东工具箱XDRX API 的插件,请下载最新版本的 晓东工具箱XDRX API开发环境 一键安装
2、在ACAD中如何加载插件,请看 论坛插件使用方法
3、如果您有要求需要定制插件,请到 编程申请 论坛发帖求助

插件详细内容

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

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

×
(defun c:ddzx ();点到直线的距离
  (setq pt0 (getpoint "\n请选择直线起点:"))
  (setq pt1 (getpoint "\n请选择直线第二点:"))  
  (setq pt2 (getpoint "\n请输入待求点:"))
  (setq y0 (car pt0));获取点列表的第一个元素
  (setq x0 (cadr pt0));获取点列表的第二个元素
  ;(setq h0 (caddr pt1))获取点列表的第三个元素
  (setq y1 (car pt1));获取点列表的第一个元素
  (setq x1 (cadr pt1));获取点列表的第二个元素
  ;(setq h1 (caddr pt1))获取点列表的第三个元素
  (setq y2 (car pt2));获取点列表的第一个元素
  (setq x2 (cadr pt2));获取点列表的第二个元素
  ;(setq h2 (caddr pt2))获取点列表的第三个元素
  (setq a (distof (rtos (distance pt0 pt1) 2 3)));直线PT0到PT1距离
  (setq b (distof (rtos (distance pt1 pt2) 2 3)));待求点PT2至直线终点PT1的距离
  (setq c (distof (rtos (distance pt2 pt0) 2 3)));待求点PT2至直线起点PT0的距离
  ;(setq d2 (abs (/ (- (* b b) (* a a) (* c c)) (* 2 a))));垂足至直线起点pt0的距离公式
  ;(setq d1 (sqrt (- (* c c) (* d2 d2))))
  (setq dx (- x1 x0) dy (- y1 y0));坐标增量
  ;(setq xxj (atan (/ dy dx)))根据坐标增量计算象限角(弧度)
  (cond
     ((and (= dy 0) (> dx 0));计算0度象限角
         (setq xxj 0)
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (= dx 0) (> dy 0));计算90度象限角
         (setq xxj (/ PI 2))
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (= dy 0) (< dx 0));计算180度象限角
         (setq xxj PI)
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (= dx 0) (< dy 0));计算270度象限角
         (setq xxj (+ PI (/ PI 2)))
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (> dx 0) (> dy 0));计算第一象限角度
         (setq xxj (atan (/ dy dx)))
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (< dx 0) (> dy 0));计算第二象限角度
         (setq xxj (+ (atan (/ dy dx)) PI))
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (< dx 0) (< dy 0));计算第三象限角度
         (setq xxj (+ (atan (/ dy dx)) (* PI 3)))
         (setq fwj (angtos xxj 1 6)));弧度转换角度
     ((and (> dx 0) (< dy 0));计算第四象限角度
         (setq xxj (atan (/ dy dx)))
         (setq fwj (angtos xxj 1 6)));弧度转换角度
  )
  (setq dx2 (- x2 x0) dy2 (- y2 y0))
  ;(setq xxj (atan (/ dy dx)))根据坐标增量计算象限角(弧度)
  (cond
     ((and (= dy2 0) (> dx2 0));计算0度象限角
         (setq xxj2 0)
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
     ((and (= dx2 0) (> dy2 0));计算90度象限角
         (setq xxj2 (/ PI 2))
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
     ((and (= dy2 0) (< dx2 0));计算180度象限角
         (setq xxj PI)
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
     ((and (= dx2 0) (< dy2 0));计算270度象限角
         (setq xxj2 (+ PI (/ PI 2)))
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
     ((and (> dx2 0) (> dy2 0));计算第一象限角度
         (setq xxj2 (atan (/ dy2 dx2)))
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
     ((and (< dx2 0) (> dy2 0));计算第二象限角度
         (setq xxj2 (+ (atan (/ dy2 dx2)) PI))
         (setq fwj2 (angtos xxj 1 6)));弧度转换角度
     ((and (< dx2 0) (< dy2 0));计算第三象限角度
         (setq xxj2 (+ (atan (/ dy2 dx2)) (* PI 3)))
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
     ((and (> dx2 0) (< dy2 0));计算第四象限角度
         (setq xxj2 (atan (/ dy2 dx2)))
         (setq fwj2 (angtos xxj2 1 6)));弧度转换角度
  )
(setq xxjc (distof (rtos (- xxj2 xxj) 2 7)))
(cond
       ((= xxj xxj2)
         (setq d2 (distof (rtos (distance pt2 pt0) 2 3)))
         (setq d1 (distof (rtos 0 2 3)))
         )
       ((= b (sqrt (+ (* a a) (* c c))))
          (setq d2 (distof (rtos 0 2 3)))
          (setq d1 (distof (rtos (distance pt2 pt0) 2 3)))
        )
       ((= xxj2 (+ xxj pi))
         (setq d2 (distof (rtos (distance pt2 pt0) 2 3)))
         (setq d1 (distof (rtos 0 2 3)))
         )
         (
         (setq d2 (distof (rtos (abs (/ (- (* b b) (* a a) (* c c)) (* 2 a))) 2 3)));垂足至直线起点pt0的距离
         (setq d1 (distof (rtos (sqrt (- (* c c) (* d2 d2))) 2 3)))
         )
         )
  (princ "\n垂足到起点的距离D2为=") (prin1 d2) (princ)  
  (princ "\n待求点到直线垂足的距离D1为=") (prin1 d1) (princ)
      )

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

已领礼包: 2476个

财富等级: 金玉满堂

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 26个

财富等级: 恭喜发财

发表于 2017-6-20 20:30:49 | 显示全部楼层

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

使用道具 举报

已领礼包: 83个

财富等级: 招财进宝

发表于 2017-6-21 07:33:00 | 显示全部楼层
看不懂trans,要学的还很多。如果是道路工程中的曲线,是否也能准确求出距离
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 812个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

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

使用道具 举报

 楼主| 发表于 2017-6-29 12:55:50 来自手机 | 显示全部楼层
q3_2006 发表于 2017-6-20 20:07

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

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-6-29 22:04:52 | 显示全部楼层

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

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 02:41 , Processed in 0.451567 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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