【旋转角度(CW/CCW)的累加计算】

1,需求
旋转角度(CW/CCW)的累加计算

2,代码实现

class AngleProcess:def __init__(self, is_cw, period=360):self.is_cw = is_cwself.period = periodself.half_period = period / 2self.init_angle_0_and_circle_num()def check_if_add_one_rotation(self, is_cw, pre_angle, cur_angle, half_period=180):"""如果是 cw :pre_angle 到 360, cur_angle 到 0。如何表达这个?意思是下降了 180+如果是 ccw :pre_angle 到 0, cur_angle 到 360。如何表达这个?意思是上升了 180+"""if is_cw:if pre_angle - cur_angle > half_period:is_add_one_rotation = Trueelse:is_add_one_rotation = Falseelse:if cur_angle - pre_angle > half_period:is_add_one_rotation = Trueelse:is_add_one_rotation = Falsereturn is_add_one_rotationdef init_angle_0_and_circle_num(self):self.angle_0 = Noneself.circle_num = 0def get_angle_cumulatived(self, cur_angle, pre_angle=None):my_angle = Noneif self.angle_0 is None:self.angle_0 = cur_angleif pre_angle is not None:is_add_one_rotation = self.check_if_add_one_rotation(self.is_cw, pre_angle, cur_angle)if is_add_one_rotation:self.circle_num += 1print(f"self.circle_num: {self.circle_num}")if self.is_cw:my_angle = (cur_angle - self.angle_0) + self.period * self.circle_numelse:my_angle = (self.angle_0 - cur_angle) + self.period * self.circle_numreturn my_angledef main():is_cw = Falsexx = list(range(360, 1, -10)) + list(range(360, 1, -10)) + list(range(360, 1, -10))# is_cw = True# xx = list(range(1, 360, 10)) + list(range(1, 360, 10)) + list(range(1, 360, 10))ap_obj = AngleProcess(is_cw=is_cw, period=360)ap_obj.init_angle_0_and_circle_num()pre_angle = None# ap_obj.set_angle_0(cur_angle)my_angle_list = list()for cur_angle in xx:# print(f"cur_angle-{cur_angle}")my_angle = ap_obj.get_angle_cumulatived(cur_angle=cur_angle, pre_angle=pre_angle)my_angle_list.append(my_angle)pre_angle = cur_angleimport matplotlib.pyplot as pltplt.plot(my_angle_list)plt.show()if __name__ == '__main__':main()

3,结果
CW/CCW都是从0开始累加,图形一致。这个对CW/CCW画到一张图有好处

CW/CCW都是从0开始累加

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/439772.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

麒麟系统—— openKylin 安装 redis

麒麟系统—— openKylin 安装 redis 一、准备工作1. 确保麒麟系统 openKylin 已经安装完毕。 二、下载安装文件三、解压安装解压安装 四、配置与运行修改配置文件以配置文件运行 五、加入到服务中最终:介绍配置的其他参数使用 Redis是一种开源的、基于内存的高速缓存…

python字典JSON 和csv文件

JSON与Python字典 Python中的字典与JSON非常类似而且支持嵌套结构。Json通过key取值的过程和python字典通过索引取值过程完全一致。JavaScript数据类型(值)对应的Python数据类型(值) JSONPythonobjectdictarraylist/tuplestring…

SQL基础知识整理--干货!常见的SQL面试题:经典50例!

SQL基础知识整理 select 查询结果,如: [学号,平均成绩:组函数avg(成绩)]from 从哪张表中查找数据,如:[涉及到成绩:成绩表score]where 查询条件,如:[b.课程号’0003′ and b.成绩>80]group by 分组,如:[…

【React】在项目中使用阿里图标库

文章目录 打开阿里图标库 》 选择相应图标项目 选择Symbol格式,并复制链接 基于antd新建一个JS文件 MyIcon.js,并绑定上面复制的链接 import { createFromIconfontCN } from ant-design/icons;// 图标有更新时,需更新下面图标链接 export…

关于虚拟机ubuntu系统无法上网问题

一、虚拟机的连接方式 1、查看自己虚拟机的网络连接方式 选择虚拟机->右键设置->网络适配器 2、拓展——虚拟机的三种网络模式 2.1 首先安装虚拟机后,可以看到主机网络适配器多2张网卡 2.2 在VMware虚拟机中查看网络设置 点击菜单栏编辑 -> 虚拟网络…

websocket 通信协议

websocket是什么 答: 它是一种网络通信协议,是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 意思就是服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息 属于服务器推送技术的一种. 为什么需要websocket? 疑问?…

Exchange:清理日志文件

准备脚本: 准备清理日志文件的脚本 # Set execution policy if not set $ExecutionPolicy Get-ExecutionPolicy if ($ExecutionPolicy -ne "RemoteSigned") {Set-ExecutionPolicy RemoteSigned -Force }# Cleanup logs older than the set of days in …

数据结构奇妙旅程之七大排序

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

vue实践:构建高效的电子签名功能

前言 在现代数字化时代,电子签名成为了一种方便、高效且安全的签署文件的方式。本文将介绍电子签名的原理和实现方法,帮助你快速掌握这一重要的工具。 电子签名是什么? 电子签名是一种数字化的签名方式,用于验证和确认电子文档、…

85.网游逆向分析与插件开发-物品使用-物品使用的逆向分析与C++代码的封装

内容参考于:易道云信息技术研究院VIP课 上一个内容:项目需求与需求拆解-CSDN博客 码云地址(ui显示角色数据 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:453dd83d54140d2e1ee65c9…

【vue】defineModel在vue3.4中的最新用法和详解

在2023年12月28日,尤大发布了vue3.4版本,这个版本主要对一些实验性特性的改进(比如defineModel),大量重写了模板编译器并重构了响应式系统,可以说是大大提升了运行速度和效率。 之前在vue3.3中defineModel…

Rust循环和函数

下面聊聊以下主题: 基于条件的分支循环函数属性测试 基于条件的分支 基于条件的分支,可以通过常见的 if、if else 或 if else if else 构造来完成,例如下面的示例: fn main() { let dead false; let health 48; if dead { p…