设为首页收藏本站

晓东CAD家园-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

返回列表
查看: 190|回复: 10

[工具] 点到直线的距离

[复制链接]

签到天数: 8 天

连续签到: 1 天

[LV.3]偶尔看看II

发表于 2017-6-20 20:02:42 | 显示全部楼层 |阅读模式

  • 插件名称 : 点到直线的距离
  • 作  者 : 老仓测绘上班记
  • 运行环境 :不限 
  • 发布时间 :2017-06-20
  • 命令名称 :ddzx
  • 插件介绍 :计算点到选取两点直线的距离
  • 备  注 : (点击图片可以放大)
(点击图片可以放大)

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

插件详细内容

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

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

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




上一篇:多段线顶点消除重复点,重复段
下一篇:凯元工具免费下载分享:一款多功能设计辅助工具
回复
百度谷歌雅虎搜狗搜搜有道360奇虎

使用道具 举报

签到天数: 1177 天

连续签到: 4 天

[LV.10]以坛为家III

已领礼包: 2475个

财富等级: 金玉满堂

发表于 2017-6-20 20:07:42 | 显示全部楼层
(car (trans (mapcar '- pt p1) 0 (mapcar '- p2 p1)))
回复 支持 反对

使用道具 举报

签到天数: 498 天

连续签到: 4 天

[LV.9]以坛为家II

已领礼包: 18个

财富等级: 恭喜发财

发表于 2017-6-20 20:15:03 | 显示全部楼层
纯数学计算的啊。
回复 支持 反对

使用道具 举报

签到天数: 93 天

连续签到: 11 天

[LV.6]常住居民II

已领礼包: 25个

财富等级: 恭喜发财

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

正解,用trans一句话就能解决的问题
回复 支持 反对

使用道具 举报

签到天数: 55 天

连续签到: 1 天

[LV.5]常住居民I

已领礼包: 83个

财富等级: 招财进宝

发表于 2017-6-21 07:33:00 | 显示全部楼层
看不懂trans,要学的还很多。如果是道路工程中的曲线,是否也能准确求出距离
回复 支持 反对

使用道具 举报

签到天数: 70 天

连续签到: 46 天

[LV.6]常住居民II

已领礼包: 178个

财富等级: 日进斗金

发表于 2017-6-21 08:08:06 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

签到天数: 309 天

连续签到: 65 天

[LV.8]以坛为家I

点击这里给我发消息

已领礼包: 557个

财富等级: 财运亨通

发表于 2017-6-21 09:16:51 | 显示全部楼层
感谢楼主分享
回复 支持 反对

使用道具 举报

签到天数: 59 天

连续签到: 1 天

[LV.5]常住居民I

点击这里给我发消息

已领礼包: 22个

财富等级: 恭喜发财

发表于 2017-6-21 22:13:39 | 显示全部楼层
支持一下.看看看看
回复 支持 反对

使用道具 举报

签到天数: 8 天

连续签到: 1 天

[LV.3]偶尔看看II

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

第一次学编程,菜鸟只能做成这样了
回复 支持 反对

使用道具 举报

签到天数: 289 天

连续签到: 3 天

[LV.8]以坛为家I

已领礼包: 20个

财富等级: 恭喜发财

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

你能把数**用到这样,很了不起了。
回复 支持 反对

使用道具 举报

签到天数: 1430 天

连续签到: 37 天

[LV.10]以坛为家III

已领礼包: 4292个

财富等级: 富可敌国

发表于 2017-7-1 00:08:54 | 显示全部楼层
楼主还是很厉害的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

辽公网安备 21040202000005号

GMT+8, 2017-7-27 22:35 , Processed in 0.480119 second(s), 85 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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