计算两点距离
最近刚学习编程,发现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))
计算结果如下:
本帖最后由 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度不能说是没有温度
本帖最后由 llsheng_73 于 2025-1-11 11:02 编辑
distance计算的距离是三维坐标的,Z值也会参与计算,你的自编函数只计算了二维坐标的,也就是平面投影距离,从两组计算结果看,你的targetpt和ptlist里边的点,z值相差比较大 对象捕捉关了吗? mahuan1279 发表于 2025-1-11 10:59
对象捕捉关了吗?
对象捕捉是会影响一些东西,不过基本只影响通过command调用命令来画图或编辑,对于计算不可能有影响,对entmake,entmod也不会有影响,对vla方法画图或修改有没影响未验证 llsheng_73 发表于 2025-1-11 10:59
distance计算的距离是三维坐标的,Z值也会参与计算,你的自编函数只计算了二维坐标的,也就是平面投影距离 ...
按函数说明:如果提供的参数中有一个或两个二维点,distance 函数会忽略所提供的任何三维点的 Z 坐标,而返回将这些点投影到当前构造平面上后所得的点之间的二维距离。我点击的位置需要计算高程,初始高程为0,计算所有已知点与该点的距离应该忽略高程值 jim66xy 发表于 2025-1-11 11:10
按函数说明:如果提供的参数中有一个或两个二维点,distance 函数会忽略所提供的任何三维点的 Z 坐标,而 ...
初始高程为零不等于该点为二维点。 居然会怀疑distance函数,不如画个三维图进行判断 感谢分享,学习了 llsheng_73 发表于 2025-1-11 11:13
target_pt 是有Z值的吧,只不过它是0,0不是没有,它是三维点,所以distance会计算三维距离
你需要忽略 ...
”0元可以说是没有钱,但0度不能说是没有温度“
页:
[1]