主要内容

atan2

定点值的四象限反正切

说明

z = atan2(y,x) 返回 fi 输入 yx 的四象限反正切。

示例

示例

全部折叠

使用 atan2 函数计算无符号和有符号定点输入值的反正切。

无符号输入值

此示例使用无符号 16 位字长值。

y = fi(0.125,0,16);
x = fi(0.5,0,16);  
z = atan2(y,x)
z = 
    0.2450

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Unsigned
            WordLength: 16
        FractionLength: 15

有符号输入值

此示例使用有符号 16 位字长值。

y = fi(-0.1,1,16);
x = fi(-0.9,1,16);  
z = atan2(y,x)
z = 
   -3.0309

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 13

输入参数

全部折叠

y 坐标,指定为标量、向量、矩阵或多维数组。

yx 可以是包含以弧度为单位的定点角度值的有符号或无符号实数标量、向量、矩阵或 N 维数组。输入 yx 的大小必须相同。如果它们大小不同,则至少一个输入必须为标量值。yx 的有效数据类型有:

  • fi 单精度

  • fi 双精度

  • 具有二进制小数点定标的 fi 定点

  • 具有二进制小数点定标的 fi 定标双精度

数据类型: fi

x 坐标,指定为标量、向量、矩阵或多维数组。

yx 可以是包含以弧度为单位的定点角度值的有符号或无符号实数标量、向量、矩阵或 N 维数组。输入 yx 的大小必须相同。如果它们大小不同,则至少一个输入必须为标量值。yx 的有效数据类型有:

  • fi 单精度

  • fi 双精度

  • 具有二进制小数点定标的 fi 定点

  • 具有二进制小数点定标的 fi 定标双精度

数据类型: fi

输出参量

全部折叠

四象限反正切,以标量、向量、矩阵或多维数组形式返回。

zyx 的四象限反正切。znumerictype 取决于 yx 的符号性:

  • 如果 yx 为有符号,则 z 是范围 [-pi,pi] 中的有符号定点数。它有 16 位字长和 13 位小数长度 (numerictype(1,16,13))。

  • 如果 yx 均为无符号,则 z 是范围 [0,pi/2] 中的无符号定点数。它有 16 位字长和 15 位小数长度 (numerictype(0,16,15))。

输出 z 始终与默认 fimath 相关联。

详细信息

全部折叠

算法

全部折叠

atan2 函数使用 8 位查找表计算定点输入的四象限反正切值,如下所示:

  1. 将输入绝对值相除,得到介于 0 和 1 之间的无符号小数定点 16 位比率。y 和 x 的绝对值确定哪个值是除数。

    yx 输入的符号确定其比率位于哪个象限。绝对值较大的输入用作分母,从而产生介于 0 和 1 之间的值。

  2. 基于 16 位无符号存储整数值计算表索引:

    1. 使用 8 个最高有效位从表中查得第一个值。

    2. 使用表中与之相邻的下一个更大的值作为第二个值。

  3. 运用最近邻线性插值的方法,使用 8 个最低有效位在第一个和第二个值之间进行插值。此插值产生一个在范围 [0, pi/4) 内的值。

  4. 基于原始 yx 输入的值,对生成的角度执行八分圆校正。

此反正切计算仅精确到输入的前 16 个最高有效位。

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2012a 中推出

另请参阅

| | | |