平滑arctan的值,将值映射为0~2π |
您所在的位置:网站首页 › matlab中atan2函数怎么计算 › 平滑arctan的值,将值映射为0~2π |
欢迎访问我的个人博客:xie-kang.com 原文地址
在某些场景计算夹角时,会期望带上象限信息。 此时atan函数将不再满足我们的使用要求,因为atan返回值为 -π/2 ~ π/2,它没有携带有象限信息。atan在1附近会发生符号翻转,有时候我们希望平滑处理1附近的值以达到我们所期望的效果。
atan函数图像,来源于google。
atan2此时可以满足我们对其结果带上象限的期望。 atan2的实现逻辑:
注:图片来源于google
使用图像可以直观体现为:
使用atan2所携带的象限信息我们可以将atan2的结果映射到0~2π,: float mapAtan2(float x, float y) { float t = std::atan2(y, x); return t < 0 ? 2 * 3.1415926 + t : t; };该过程可以直观体现为:
以下是在工程中碰到的实际问题,我们在处理路径上的文本的绘制时,使用了atan来计算路径上的点的法线的夹角,当法线夹角接近y轴时会发生符号翻转,所以出现了绘制出了下图错误的图像,其中的文本没有严格在线条的右侧。 在经过使用atan2且加上映射处理后得到的正确结果:
automapAtan2=[](floatx,floaty)->float{ floatt=std::atan2(y,x); returnt |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |