lishucheng96 发表于 2018-1-7 05:22:44

计算坐标方位角函数

;;计算坐标方位角函数
;;(azimuth (getpoint) (getpoint))
;;返回从pt1到pt2的方位角弧度值
;;by 半边书生
(defun azimuth (pt1 pt2 / dxy fwj)
    (setq dxy (mapcar '- pt2 pt1))
    (setq fwj (atan (car dxy) (cadr dxy)))
    (if (< fwj 0) (setq fwj (+ fwj (* 2 pi))))
   fwj
)

xinxirong 发表于 2018-1-14 03:25:12

跟angle有区别吗?

wzg356 发表于 2020-11-11 21:49:14

这是解密angle

cchessbd 发表于 2022-10-15 22:47:20

本帖最后由 cchessbd 于 2022-10-15 23:20 编辑

wzg356 发表于 2020-11-11 21:49
这是解密angle
经过仔细核对,楼主的函数有误。(atan y x) 参数用反了。幸亏我发现了这个错误!下面贴出autocad 2006自带的atan函数英文说明。


atan





Returns the arctangent of a number in radians(atan num1 ) Argumentsnum1A number.num2A number.Return ValuesThe arctangent of num1, in radians, if only num1 is supplied. If you supply both num1 and num2 arguments, atan returns the arctangent of num1/num2, in radians. If num2 is zero, it returns an angle of plus or minus 1.570796 radians (+90 degrees or –90 degrees), depending on the sign of num1. The range of angles returned is −pi/2 to +pi/2 radians.ExamplesCommand: (atan 1) 0.785398Command: (atan 1.0) 0.785398Command: (atan 0.5) 0.463648Command: (atan 1.0) 0.785398Command: (atan -1.0) -0.785398Command: (atan 2.0 3.0) 0.588003Command: (atan 2.0 -3.0) 2.55359Command: (atan 1.0 0.0) 1.5708

将y x参数改过来后,实际上得到的是极坐标下与x轴夹角的角度。极坐标下的方位角有更简单的函数。

而且与地勘的方位角是2个概念,因为地勘是以北向为轴。

好了,不多说了,我还是再去搬砖吧,因为刚刚做了几十个错的地勘方位角。。。


cchessbd 发表于 2022-10-16 01:32:18

本帖最后由 cchessbd 于 2022-10-17 12:51 编辑


注意以下几句话是错误的:

进一步排错发现,楼主太马虎了。

第三象限的角度肯定是错的,因为第三象限atan 返回正值,在闭区间(0,90°);此时x轴方位角正确区间为(180,270)。

第二象限应该也是错的。此时atan 返回负值,在闭区间(-90°,0),加上360后在(270,360);而此时正确区间(90,180)。

综上,大家不要用这个函数。用系统自带的angle就行。


cchessbd 发表于 2022-10-17 08:25:54

本帖最后由 cchessbd 于 2022-10-17 12:49 编辑

cchessbd 发表于 2022-10-16 01:32
进一步排错发现,楼主太马虎了。



经过实际运行,楼主函数是对的,没有问题。但是很奇怪,我之前读的几十个方位角不对是什么问题?


经过对 atan 函数在cad里面的运行测试。搞明白了(atan x y)和(atan num)函数的不同。

获取角度函数有三个,(angel pt1 pt2),(atan num),(atan x y)

对点P(x,y),从第一象限顺时针转到第四象限时,(atan x y) 返回以Y轴和OP夹角弧度值,。此时北向方位角和返回值一致

对点P(x,y),从第二象限逆时针转到第三象限时,(atan x y) 返回以Y轴和OP夹角弧度值,(0,-pi)。此时北向方位角需加上2*pi。

所以(atan x y)返回值区间为(-pi,pi]。这和数学中atan函数以及帮助里面的说明不一样。

附带英文帮助说明:The range of angles returned is -pi/2 to +pi/2 radians.即(-pi/2,pi/2),这个是(atan num)的返回值。

而(angel pt1 pt2)返回极坐标角,即与X轴夹角。区间按第一二三四象限逆时针的话,为[0,2*pi)。
页: [1]
查看完整版本: 计算坐标方位角函数