平滑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<0?2*M_PI+t:t;
};
平滑arctan的值,将值映射为0~2π的更多相关文章
- c++ 左值右值 函数模板
1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ...
- C++ 左值 右值
最近在研究C++ 左值 右值,搬运.收集了一些别人的资料,供自己记录和学习,若以后看到了更好的解释,会继续补充.(打“?”是我自己不明白的地方 ) 参考:<Boost程序库探秘——深度解析C ...
- java将map拼接成“参数=值&参数=值”
Java将Map拼接成"参数=值&参数=值" 把一个map的键值对拼接成"参数=值&参数=值"即"username=angusbao& ...
- C++ 左值与右值 右值引用 引用折叠 => 完美转发
左值与右值 什么是左值?什么是右值? 在C++里没有明确定义.看了几个版本,有名字的是左值,没名字的是右值.能被&取地址的是左值,不能被&取地址的是右值.而且左值与右值可以发生转换. ...
- Jmeter的JDBC Request,sql参数化及返回值取值
1.JDBC Request面板 Variable Name:数据库连接池的名字,需要与JDBC Connection Configuration的Variable Name Bound Pool名字 ...
- 根据条件返回相应值 decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)
decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值) [功能]根据条件返回相应值 [参数]c1, c2, ...,cn,字符型/数值型/日期型,必须类型相同或null 注 ...
- C和C指针小记(八)-操作符、左值右值
1.移位操作符 移位操作符分为左移操作符(<<)和右移操纵符(>>) 对于无符号数:左右位移操作都是逻辑位移 对于有符号数:到底是采用逻辑位移还是算术位移取决于编译器.如果一个 ...
- 关于布尔值bool值
1.空或0布尔值为false,非0或非空为true 2.多个判断连在一起判断优先级:(括号)>not >and >or and: print(27 and 1>4) - ...
- 左值&右值
一.引子 我们所谓的左值.右值,正确的说法应该是左值表达式.右值表达式. 因为C++的表达式不是左值就是右值. 在C中,左值指的是既能够出现在等号左边也能出现在等号右边的表达式,右值指的则是只能出现在 ...
- CF E. Vasya and a Tree】 dfs+树状数组(给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值)
题意: 给你一棵n个节点的树,每个点有一个权值,初始全为0,m次操作,每次三个数(v, d, x)表示只考虑以v为根的子树,将所有与v点距离小于等于d的点权值全部加上x,求所有操作完毕后,所有节点的值 ...
随机推荐
- Java课后总结2
特殊之处:有两个名称一摸一样的方法square(),但是两种方法的返回值的数据类型以及参数的数据类型都是不同的,一个为int一个为double. 运行结果:The square of integer ...
- 面试视频知识点整理1-12(渲染机制,js运行机制,页面性能,错误监控)
技巧(赞美面试官研究的比较深) 1.渲染机制 什么是DOCTYPE及作用? DTD(文档类型定义)是一系列的语法规则,用于定义文件类型.浏览器会根据它来判断文档类型,决定使用何种协议来解析以及切换浏览 ...
- shell中;与&&的区别
&& 后一个命令执行需要依赖前一个命令执行成功 :各个命令都会依次执行,无论成功与否
- C#使用SharpZipLib解压多文件的zip压缩文件数据流,保存到本地
代码: public async Task<ReturnModel<List<string>>> UploadModel() { var task = new Ta ...
- Vmware 虚拟机Ubuntu系统,解决忘记用户名和密码解决办法
1.在开机界面按住shift,会加载grub的启动界面,找到Advaced options for Ubuntu选项.按"e" 进入编辑模式. 2.光标移动至ro,改为rw,(Li ...
- 基于Linux的ssh协议配置sftp
sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1. 创建sftp组 创建完成之后使用cat /etc/group命令组的信息 ...
- Kafka的启动 并创建topic
一.进入到kafka的bin目录下,运行 ./kafka-server-start.sh -daemon /app/kafka/config/server.properties 注意:如果是0.9版本 ...
- elasticsearch 根据主键_id更新部分字段
package com.better517na.ebookingbusiservice.helper;import com.alibaba.fastjson.JSON;import com.aliba ...
- AIGC 至少能在两个方面改变当前的世界-纯银
互联网圈一个正在形成的共识是,web3 只是金融领域的创新,还没有任何征兆能进入大众社会,但 AIGC 对世界的改变正在眼前发生.AIGC 至少能在两个方面改变当前的世界.1.对于缺乏创造力的(文字) ...
- zxb2022习题班26
(1) 购买日是2x21年12月31日, 理由:从该日起,甲公司能够控制乙公司的财务和经营决策:该项交易后续不存在实质性障碍. 商誉=10*10000-100000*80%=20000 相关会计分录: ...