首页 > 其他分享 >旋转矢量合成,两个圆圈

旋转矢量合成,两个圆圈

时间:2024-11-10 19:30:47浏览次数:1  
标签:set angle 矢量 旋转 np scale arrow 圆圈 pi

image

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle, FancyArrowPatch
from matplotlib.animation import FuncAnimation

# 创建一个新图和两个坐标轴
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))

# 设置坐标轴的等比例,确保圆圈是正圆
ax1.set_aspect('equal')
ax2.set_aspect('auto')

# 限制坐标轴的范围
ax1.set_xlim(-2, 2)
ax1.set_ylim(-2, 2)
ax2.set_xlim(0, 2 * np.pi)
ax2.set_ylim(-1.5, 1.5)

# 设置坐标轴标签
ax1.set_xlabel('X axis')
ax1.set_ylabel('Y axis')
ax2.set_xlabel('Angle (radians)')
ax2.set_ylabel('Amplitude')

# 设置标题
ax1.set_title('Rotating Arrows')
ax2.set_title('Sine Waves')

# 绘制内外两个圆圈
inner_circle = Circle((0, 0), 1, color='blue', fill=False)
outer_circle = Circle((0, 0), 1.5, color='black', fill=False)
ax1.add_patch(inner_circle)
ax1.add_patch(outer_circle)

# 初始化箭头的参数
short_arrow_scale = 1
long_arrow_scale = 1.5
arrow1 = FancyArrowPatch((0, 0), (short_arrow_scale, 0), color='red', mutation_scale=10, arrowstyle='->', lw=2)
arrow2 = FancyArrowPatch((0, 0), (short_arrow_scale, 0), color='green', mutation_scale=10, arrowstyle='->', lw=2)
arrow3 = FancyArrowPatch((0, 0), (short_arrow_scale, 0), color='blue', mutation_scale=10, arrowstyle='->', lw=2)
long_arrow = FancyArrowPatch((0, 0), (long_arrow_scale, 0), color='purple', mutation_scale=15, arrowstyle='->', lw=2)
ax1.add_patch(arrow1)
ax1.add_patch(arrow2)
ax1.add_patch(arrow3)
ax1.add_patch(long_arrow)

# 初始化正弦波的线
x_data = np.linspace(0, 2 * np.pi, 1000)
line1, = ax2.plot(x_data, np.sin(x_data), 'r-', label='sin(ωt)')
line2, = ax2.plot(x_data, np.sin(x_data + 2 * np.pi / 3), 'g-', label='sin(ωt + 2π/3)')
line3, = ax2.plot(x_data, np.sin(x_data + 4 * np.pi / 3), 'b-', label='sin(ωt + 4π/3)')

# 添加图例
ax2.legend()

# 初始化角度
angle = 0

# 更新函数,用于动画
def update(frame):
    global angle
    angle += 0.05  # 每次旋转0.05弧度
    if angle > 2 * np.pi:  # 如果角度超过2π,则重置角度
        angle = 0

    # 更新短箭头的位置
    arrow1.set_positions((0, 0), (short_arrow_scale * np.cos(angle), short_arrow_scale * np.sin(angle)))
    arrow2.set_positions((0, 0), (short_arrow_scale * np.cos(angle + 2 * np.pi / 3), short_arrow_scale * np.sin(angle + 2 * np.pi / 3)))
    arrow3.set_positions((0, 0), (short_arrow_scale * np.cos(angle + 4 * np.pi / 3), short_arrow_scale * np.sin(angle + 4 * np.pi / 3)))

    # 更新长箭头的位置,错开半个相位
    long_arrow.set_positions((0, 0), (long_arrow_scale * np.cos(angle + np.pi / 6), long_arrow_scale * np.sin(angle + np.pi / 6)))

    # 更新正弦波的数据
    line1.set_ydata(np.sin(x_data + angle))
    line2.set_ydata(np.sin(x_data + angle + 2 * np.pi / 3))
    line3.set_ydata(np.sin(x_data + angle + 4 * np.pi / 3))

    return arrow1, arrow2, arrow3, long_arrow, line1, line2, line3

# 创建动画
ani = FuncAnimation(fig, update, frames=np.arange(0, 360), interval=50, blit=True, repeat=True)

# 保存GIF

ani.save('sine_waves_and_arrows.gif', writer='pillow', fps=12)

# 显示图形
plt.show()

标签:set,angle,矢量,旋转,np,scale,arrow,圆圈,pi
From: https://www.cnblogs.com/redufa/p/18538344

相关文章

  • 三相电合成旋转矢量-动态图
    importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.patchesimportCircle,FancyArrowPatchfrommatplotlib.animationimportFuncAnimation#创建一个新图和两个坐标轴fig,(ax1,ax2)=plt.subplots(1,2,figsize=(12,6))#设置坐标轴的等比例,......
  • 箭头旋转+正弦波
    importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.patchesimportCircle,FancyArrowPatchfrommatplotlib.animationimportFuncAnimation#创建一个新图和两个坐标轴fig,(ax1,ax2)=plt.subplots(1,2,figsize=(12,6))#设置坐标轴的等比例,......
  • 含 Latex 公式的矢量绘图工具
    InkscapeInkscape安装TexText扩展,使得Inkscape在制图过程中可以插入LaTeX公式。TexText扩展安装教程:https://textext.github.io/textext/install/windows.html以上两点是按照TexText扩展成功的必备条件,第一点在安装Inkscape1.4时必须勾选红框部分,默认安装......
  • Open3D (C++) 旋转矩阵转欧拉角公式推导及过程实现
    目录一、概述1.1原理1.2实现步骤1.3应用场景1.4注意事项二、关键函数2.1头文件2.2主要函数三、完整代码三、结果展示一、概述  将旋转矩阵转换为欧拉角是逆向理解三维对象姿态的一种方法。旋转矩阵是一个3x3的正交矩阵,它描述了在三维空......
  • PCL 旋转矩阵转欧拉角
    目录一、概述1.1原理1.2实现步骤1.3应用场景1.4注意事项二、关键函数2.1头文件2.2主要函数三、完整代码三、结果展示内容抄自CSDN点云侠:【2024最新版】PCL点云处理算法汇总(C++长期更新版)。质量无忧,永久免费,可放心复制粘贴。一、概述  将旋转矩阵转换为......
  • php imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
    一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF,JPEG,GIF,PNG,PDF以及PhotoCD等格式。利用Image......
  • LeetCode100之旋转图像(48)--Java
    1.问题描述  给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转90度。你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。        示例1输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]......
  • IconFont - 阿里巴巴矢量图标库:打造高效、美观的网页设计
    文章目录前言一、IconFont概述二、IconFont的主要特点丰富的图标资源强大的图标管理功能灵活的图标编辑选项快速便捷的集成方式活跃的社区交流三、IconFont的使用第一步:注册账号第二步:浏览和选择图标第三步:添加图标到购物车第四步:创建图标库第五步:编辑和管理图标第六步:......
  • 代码随想录算法训练营第九天|LeetCode151.翻转字符串里的单词、卡码网:55.右旋转字符串
    前言打卡代码随想录算法训练营第49期第九天︿( ̄︶ ̄)︿首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。今日题目LeetCode151翻转字......
  • 京东创作平台旋转验证码识别
    昨天京东创作平台验证码又更新了,变成了这种旋转验证码。经过我们一天的努力,终于完成了这款验证码的数据标记,模型训练。现在正确率达到了几乎100%。识别代码只需要获取图片链接,下载图片得到原图,使用下面代码就可以识别角度,然后根据角度计算滑动距离,就可以自动完成验证impor......