明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 415|回复: 8

[讨论] 计算两点距离

[复制链接]
发表于 4 天前 | 显示全部楼层 |阅读模式
最近刚学习编程,发现distance函数计算的结果与手算差别很大,下面是代码和计算结果,请高手指教!


用函数distance计算
  ;; 计算所有点到目标点的距离,并保存为 (距离 点坐标) 的列表
  (setq dist_list
    (mapcar '(lambda (pt)
              (list (distance target_pt pt) pt))
            pt_list))


自编函数计算
(defun Calculate2DDistance (pt1 pt2 / dx dy)

;; 计算两个二维点之间的距离
       
  (setq dx (- (car pt2) (car pt1))    ; 差值 x
               
        dy (- (cadr pt2) (cadr pt1))  ; 差值 y
  )
  (sqrt (+ (* dx dx) (* dy dy))) ; 二维欧几里得距离公式
)


  ;; 计算所有点到目标点的距离,并保存为 (距离 点坐标) 的列表
       
  (setq dist_list
               
    (mapcar '(lambda (pt)
                                                         
              (list (Calculate2DDistance target_pt pt) pt))
                       
            pt_list))

计算结果如下:



本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 4 天前 | 显示全部楼层
本帖最后由 llsheng_73 于 2025-1-11 11:02 编辑

distance计算的距离是三维坐标的,Z值也会参与计算,你的自编函数只计算了二维坐标的,也就是平面投影距离,从两组计算结果看,你的targetpt和ptlist里边的点,z值相差比较大
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
对象捕捉关了吗?
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
mahuan1279 发表于 2025-1-11 10:59
对象捕捉关了吗?

对象捕捉是会影响一些东西,不过基本只影响通过command调用命令来画图或编辑,对于计算不可能有影响,对entmake,entmod也不会有影响,对vla方法画图或修改有没影响未验证
回复 支持 反对

使用道具 举报

 楼主| 发表于 4 天前 | 显示全部楼层
llsheng_73 发表于 2025-1-11 10:59
distance计算的距离是三维坐标的,Z值也会参与计算,你的自编函数只计算了二维坐标的,也就是平面投影距离 ...

按函数说明:如果提供的参数中有一个或两个二维点,distance 函数会忽略所提供的任何三维点的 Z 坐标,而返回将这些点投影到当前构造平面上后所得的点之间的二维距离。我点击的位置需要计算高程,初始高程为0,计算所有已知点与该点的距离应该忽略高程值
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
本帖最后由 llsheng_73 于 2025-1-11 11:16 编辑
jim66xy 发表于 2025-1-11 11:10
按函数说明:如果提供的参数中有一个或两个二维点,distance 函数会忽略所提供的任何三维点的 Z 坐标,而 ...

target_pt 是有Z值的吧,只不过它是0,0不是没有,它是三维点,所以distance会计算三维距离
你需要忽略高程值,那么你的 target_pt就只能用二维坐标点(list x y)而不是(list x y 0),0元可以说是没有钱,但0度不能说是没有温度
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
jim66xy 发表于 2025-1-11 11:10
按函数说明:如果提供的参数中有一个或两个二维点,distance 函数会忽略所提供的任何三维点的 Z 坐标,而 ...

初始高程为零不等于该点为二维点。
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
居然会怀疑distance函数,不如画个三维图进行判断
回复 支持 反对

使用道具 举报

发表于 4 天前 | 显示全部楼层
感谢分享,学习了
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-1-15 20:03 , Processed in 0.180063 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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