RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数

     

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_d3_02

 

 

     ATAN2是一个函数,在C 语言里返回的是指方位角,C 语言中atan2的函数原型为 double atan2(double y, double x) ,返回以弧度表示的 y/x 的反正切。y 和 x 的值的符号决定了正确的象限。也可以理解为计算复数 x+yi 的辐角,计算时atan2 比 ATAN稳定(如:ATAN(y/x),当 y 远远大于 x 时,计算结果是不稳定的。ATAN2(y,x)的做法:当 x 的绝对值比 y 的绝对值大时使用 ATAN(y/x);反之使用 ATAN(x/y)。这样就保证了数值稳定性。)

 

ATAN2(x,y)返回的是原点至点(x,y)的方位角。返回值的单位为弧度,取值范围为(-π,π】

 

DMIS5.2标准如下:

 

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_拟合_03

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_d3_04

 

 

tan()正切函数,求某个角的正切值

 

在直角三角形 ABC 中(其中角 C 为 90°),角 A 的正切就是它的对边长度和临边长度的比值,如下图所示,tanA = a / b。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_取值范围_05

 

1.ATAN2(y,x)反正切函数,atan(y/x) 的增强版,能确定象限.

 

ATAN2(y,x) 函数的功能是求 y/x 的反正切值。ATAN2(y,x)ATAN(y/x)  的增强版,能够确定角度所在的象限。

 

反正切函数 ATAN2(y,x)和正切函数 tan() 的功能恰好相反:tan() 是已知一个角的弧度值,求该角的正切值;而ATAN2(y,x)是已知一个角的正切值(也就是 y/x),求该角的弧度值。


2.参数

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_取值范围_06

 

 

(1)Y表示位于 Y 轴上的值。

 

(2)X表示位于 X 轴上的值。

 

注意,x 和 y 同时为 0 时将导致域错误,因为此时的角度是不存在的,或者说是没有意义的。

 

3.返回值

 

ATAN2函数返回的是原点至点(x,y)的方位角,即与 x 轴的夹角。也可以理解为复数 x+yi 的辐角。返回值的单位为弧度,取值范围为(-π,π】

 

返回 y/x 的反正切值,以弧度表示,取值范围为(-π,π]。如上图所示,tan(θ) = y/x,θ = atan2(y, x)。

 

当 (x, y) 在象限中时:

当 (x, y) 在第一象限,0 < θ < π/2

当 (x, y) 在第二象限,π/2 < θ ≤ π

当 (x, y) 在第三象限,-π < θ < -π/2

当 (x, y) 在第四象限,-π/2 < θ < 0

 

当 (x, y) 在象限的边界(也就是坐标轴)上时:

当 y 是 0,且 x 为非负值,θ = 0

当 y 是 0,且 x 是负值,θ = π

当 y 是正值,且 x 是 0,θ = π/2

当 y 是负值,且 x 是 0,θ = -π/2

 

由此可知,一般情况下用 atan() 即可,当对所求出角度的象限有特殊要求时,应使用 atan2()。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_07

 

小知识:ATAN(Y/X)反正切函数,求反正切值

 

atan() 函数的功能是求反正切值。

 

反正切函数 atan() 和正切函数 tan() 的功能正好相反。tan() 是已知一个角的弧度值 x,求该角的正切值 y;而 atan() 是已知一个角的正切值 y,求该角的弧度值 x。

 

正切值为 x 的角的度数,以弧度表示,区间为(-π/2, π/2)。

 

注意:atan() 并不能确定角度所在的象限,例如求得的度数是 45°,并不能说明是第一象限的角度,还有可能是第三象限的角度。如果想进一步确定角度所在的象限,请使用 atan2()。

 

4.角度和弧度

 

   度和弧度都是衡量角的大小的单位,就像米(m)和英寸(in)都是用来衡量长度的单位。度用°来表示,弧度用rad表示。

 

度和弧度之间可以相互转换,转换规则为:

 

1rad = (180/π)° ≈ 57.3°

1° = (π/180)rad ≈ 0.01745rad

 

示例

求 90° 角的弧度值:

90 × (π/180) = π/2(rad)

 

弧度的定义

 

在一个圆中,弧长等于半径的弧,其所对的圆心角就是 1rad。也就是说,两条射线从圆心向圆周射出,形成一个夹角和夹角正对的一段弧。当这段弧的长度正好等于圆的半径时,两条射线的夹角的弧度为 1。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_08

 

根据定义,圆一周的弧度数为 2πr/r = 2π,360° = 2πrad,平角(即 180° 角)为 πrad,直角为 π/2rad。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_d3_09

 

在具体计算中,角度以弧度给出时,通常不写弧度单位,直接写值。最典型的例子是三角函数,例如sin(8π)、tan(3π/2)。

 

 

说明:

 

在数学坐标系中,结果为正表示从 X 轴逆时针旋转的角度,结果为负表示从 X 轴顺时针旋转的角度。

 

ATAN2(y, x) 与 ATAN(y/x)稍有不同,ATAN2(y,x)的取值范围介于 -pi 到 pi 之间(不包括 -pi),

 

而ATAN(y/x)的取值范围介于-pi/2到pi/2之间(不包括±pi/2)。

 

若要用度表示反正切值,请将结果再乘以 180/3.14159。

 

另外要注意的是,函数atan2(y,x)中参数的顺序是倒置的,atan2(y,x)计算的值相当于点(x,y)的角度值。

 

6.RationalDMIS 7.1旋转坐标系(自动计算旋转角度(三角函数功能))

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_10

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_11

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_拟合_12

 

测量一件零件之前,必须先分析图纸,使用零件的基准特征来建立零件坐标系。

 

建立零件坐标系有三个作用:准确测量二维和一维元素,二是方便进行尺寸评价,三是实现批量自动测量。

 

在测量过程中,我们往往需要利用的基准建立坐标系来评价公差,进行辅助测量,指定零件位置等,这个坐标系称为“零件坐标系”。建立零件坐标系要根据零件图纸指定的A,B,C基准的顺序指定第一轴,第二轴和坐标零点,顺序不能颠倒。

 

 

在实际应用中,根据零件在设计,加工时的基准特征情况,可以选择3-2-1法(面——线——点法),三点拟合坐标系,2点偏移队列坐标系,多点拟合坐标系,迭代对齐坐标系,合并坐标系。

 

手动采集元素构建坐标系,为了告诉测量机工件的位置。在手动坐标系之后,我们需要更改模式为程序模式,创建自动程序(自动程序是可以自动执行的),自动坐标系是为了加强坐标系的精度。精建坐标系时。不必与手动建坐标系完全一样,但必须按照图纸要求进行操作。

 

(1)采集第一基准元素——找正第一轴向

 

   建立(找正)第一轴必须用平面或轴线。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_13

 

关于第一轴向元素选择:平面,圆柱,圆锥,3D直线(台阶圆柱)

 

   圆柱和圆锥可以被认为是轴,用于指定方向。球和圆可以被认为是点,用于定义位置。平面的方向由其法向矢量决定。

 

 

    一般情况下,如果设计图上没有特别指定构建坐标系的方法,而且几何公差和尺寸也没有参照物,那么就用最好的工作表面作为主要的基准方向,该面应该尽可能的大,或者使用一个圆柱转轴,如果它作为基准足够长。

 

    坐标系的第一轴为了能够与第二轴垂直,一般采用平面,因为平面的法向矢量与平面肯定是垂直的。如果第一轴采用圆柱轴线定义,则同时确定了与其相垂直的坐标平面。

 

(2)采集BC基准两圆孔,构造直线(最佳拟合)。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_14

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_15

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_拟合_16

 

(3)3-2-1法建立零件坐标系

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_17

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_旋转角度_18

 

(4)旋转坐标系

 

       旋转角度正负——右手定则

 

      当图纸求坐标系需要做旋转时,使用的方法分别有两种方式。

 

(1)通过输入图纸上的角度进行旋转,这个角度可以通过正切函数计算(计算机计算器或者手机计算器)。

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_19

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_20

 

(2)自动计算旋转角度——推荐(山涧果子)

 

       通过输入X,Y坐标值,使用高级功能(RTOD(),ATAN2(Y,X)三角函数的计算方式),将夹角计算出来

ATAN2(x,y):计算x/y的反正切值,单位:弧度

 

RTOD(x):将弧度值转换成度

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_21

 

 夹角:ATAN2(80,60)*180/π或RTOD(ATAN2(80,60))

 

   由于 ATAN2(Y,X) 函数的参数是弧度,所以在坐标系旋转时,需要先将 弧度值转换为角度值。 ——RTOD(ATAN2(Y,X))或ATAN2(Y,X)*180/π

 

 

RationalDMIS7.1内部函数功能列表:

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_d3_22

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_23

 

拓展知识:

 

关于一个平面两个偏置圆,第二轴向时旋转角度好还是偏置直线好?

 

     我认为按理论来说这两种方法是一致的。但是在用户使用过程中发现是有区别的。直接按理论角度旋转坐标系的方向很稳定。但是构造偏置线的方法时只使用这个圆心点到直线的距离,没有考虑两圆心点之间的距离,当两圆心点变化时,造成偏置线角度的变化。这是坐标系不稳定的原因之一。

 

    建议大家最好从图纸提供的理论值中,计算出要偏置的角度,每次使用两圆心找正旋转轴后,偏置这个理论角度。这会使坐标系与两孔的位置无关。

 

 

 

RationalDMIS 7.1自动计算旋转角度(三角函数ATAN2(Y,X))_三角函数_24

 

$$/*  Header

DMISMN/'Created by [山涧果子] on Saturday, November 23, 2019', 4.0

UNITS/MM, ANGDEC, MMPS

WKPLAN/XYPLAN

PRCOMP/ON

TECOMP/ON

FLY/1.0000

MODE/MAN

SNSET/APPRCH, 2.0000

SNSET/RETRCT, 2.0000

SNSET/DEPTH, 0.0000

SNSET/SEARCH, 10.0000

SNSET/CLRSRF, 10.0000

RECALL/D(MCS)

SNSLCT/S(21-2)

GEOALG/BF, LSTSQR

GEOALG/ANGLB, DEFALT

GEOALG/CIRCLE, LSTSQR

GEOALG/ARC, LSTSQR

GEOALG/PLANE, LSTSQR

$$

$$

$$*/

MODE/MAN

F(PLN1)=FEAT/PLANE,CART,35.2867,37.7873,0.0000,-0.0000,0.0000,1.0000

$$ Measurement points are created through actual points

MEAS/PLANE, F(PLN1), 4

  PTMEAS/CART, -24.3514,  92.1369, -0.0000, -0.0000, 0.0000, 1.0000

  PTMEAS/CART, -24.9065, -10.2913, -0.0000, -0.0000, 0.0000, 1.0000

  PTMEAS/CART,  94.7980, -20.6403,  0.0000, -0.0000, 0.0000, 1.0000

  PTMEAS/CART,  95.6068,  89.9439, -0.0000, -0.0000, 0.0000, 1.0000

ENDMES

D(CRD1) = DATSET/FA(PLN1), ZDIR

F(CIR1)=FEAT/CIRCLE,INNER,CART,0.0000,0.0000,-5.3727,0.0000,0.0000,1.0000, 10.0000

$$ Measurement points are created through actual points

MEAS/CIRCLE, F(CIR1), 4

  PTMEAS/CART, -2.6091,  4.2653, -5.3727,  0.5218, -0.8531, -0.0000

  PTMEAS/CART,  4.9604,  0.6281, -5.3727, -0.9921, -0.1256, -0.0000

  PTMEAS/CART, -0.1224, -4.9985, -5.3727,  0.0245,  0.9997, -0.0000

  PTMEAS/CART, -2.0506, -4.5602, -5.3727,  0.4101,  0.9120, -0.0000

ENDMES

F(CIR2)=FEAT/CIRCLE,INNER,CART,60.0000,80.0000,-3.7877,0.0000,0.0000,1.0000, 10.0000

$$ Measurement points are created through actual points

MEAS/CIRCLE, F(CIR2), 4

  PTMEAS/CART, 58.1471, 84.6440, -3.7877,  0.3706, -0.9288, -0.0000

  PTMEAS/CART, 62.8181, 84.1302, -3.7877, -0.5636, -0.8260, -0.0000

  PTMEAS/CART, 60.3429, 75.0118, -3.7877, -0.0686,  0.9976, -0.0000

  PTMEAS/CART, 57.6742, 75.5739, -3.7877,  0.4652,  0.8852, -0.0000

ENDMES

 

$$ CREATED BY : External-Array Software, Inc

$$ DATE : Jan 19, 2009

$$ DISLAIMER: 

$$ This Macro has been tested internally but not been tested with

$$ other DMIS compatible software. This Macro is provided as sample

$$ and can be modifed for your own use. External-Array doesn't not 

$$ guarantee the quality of this Macro.

 

$$ FUNCION: Create a nominal line using two actual features

$$ DI, DJ, DK are the normal vector of the plane that the line lies on

 

M(EASI_2PT_TO_LINE) = Macro/'FEAT1', 'FEAT2', 'FEATLINE', DI, DJ, DK

DECL/LOCAL,DOUBLE,DVALUE[6]

    DECL/LOCAL,INTGR, INDEX1, INDEX2

    

    CALL/M(EASI_GETX_INDEX), FEAT1, INDEX1

    CALL/M(EASI_GETX_INDEX), FEAT2, INDEX2

    

DVALUE[1] = OBTAIN/FA(@FEAT1),INDEX1

DVALUE[2] = OBTAIN/FA(@FEAT1),INDEX1+1

DVALUE[3] = OBTAIN/FA(@FEAT1),INDEX1+2

      

DVALUE[4] = OBTAIN/FA(@FEAT2),INDEX2

DVALUE[5] = OBTAIN/FA(@FEAT2),INDEX2+1

DVALUE[6] = OBTAIN/FA(@FEAT2),INDEX2+2

      

    F(@FEATLINE) = FEAT/LINE,BND,CART,DVALUE[1],DVALUE[2],DVALUE[3],$

                                      DVALUE[4],DVALUE[5],DVALUE[6],$

                                      DI, DJ, DK

ENDMAC

 

CALL/M(EASI_2PT_TO_LINE),(CIR1),(CIR2),(LN_BF1), 0.0000, 0.0000, 1.0000

CONST/LINE,F(LN_BF1),BF,FA(CIR1),FA(CIR2)

D(CRD2) = DATSET/FA(PLN1), ZDIR, ZORIG, FA(LN_BF1), XDIR, FA(CIR1), XORIG

D(CRD2) = TRANS/ZORIG, -0, YORIG, FA(CIR1), XORIG, -0

D(CRD3) = ROTATE/ZAXIS, -RTOD(ATAN2(80,60))