正弦波与单位圆关系的可视化 包括源码

news2025/1/19 11:27:09

正弦波与单位圆关系的可视化 包括源码

flyfish

正弦波与单位圆的关系

正弦波可以通过单位圆上的点在直线(通常是 y 轴)上的投影来表示。具体来说,考虑一个单位圆,其半径为 1,圆心在原点。我们可以通过旋转一个角度 α \alpha α 来描述圆周上的点的坐标。

  1. 单位圆上的点 : 在单位圆上,给定一个角度 α \alpha α,圆周上的点的坐标为 ( cos ⁡ α , sin ⁡ α ) (\cos \alpha, \sin \alpha) (cosα,sinα)
    这里, cos ⁡ α \cos \alpha cosα 是点在 x 轴上的投影, sin ⁡ α \sin \alpha sinα 是点在 y 轴上的投影。

  2. 正弦函数
    当角度 α \alpha α 从 0 变化到 2 π 2\pi 2π 时,单位圆上的点会绕原点一圈。
    在这个过程中,点的 y 坐标(即 sin ⁡ α \sin \alpha sinα)会从 0 变化到 1,再变化到 0,然后变化到 -1,最后回到 0。
    这个 y 坐标随着角度变化的曲线就是正弦波的图像。

正弦波的生成

当我们把单位圆上的点在 y 轴上的投影 sin ⁡ α \sin \alpha sinα 作为 y 轴的值,并将对应的角度 α \alpha α 作为 x 轴的值,就可以得到正弦波的图像。

可视化解释

  1. 单位圆 :在单位圆上,我们选择一个角度 α \alpha α,则点的坐标为 ( cos ⁡ α , sin ⁡ α ) (\cos \alpha, \sin \alpha) (cosα,sinα)

  2. 投影 :在这个角度 α \alpha α 下,点在 y 轴上的投影为 sin ⁡ α \sin \alpha sinα

  3. 正弦波 :随着角度 α \alpha α 的变化,我们将每个角度 α \alpha α 与对应的 sin ⁡ α \sin \alpha sinα 值连成一条曲线,这就是正弦波。
    在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation, PillowWriter
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 初始化参数
omega = np.linspace(0, 2 * np.pi, 200)

# 圆
x = np.cos(omega) - 1
y = np.sin(omega)

# 正弦函数
x1 = omega
y1 = np.sin(x1)

# 创建图形
fig, ax = plt.subplots(figsize=(12, 6))
ax.set_aspect('equal')
ax.set_xlim(-2.2, 7)
ax.set_ylim(-1.2, 1.2)
ax.grid(True)
ax.set_xticks(np.linspace(-2, 2 * np.pi, 19))
ax.set_xticklabels(['-2', '-1', '0', r'$\pi/8$', r'$\pi/4$', r'$3\pi/8$', r'$\pi/2$', r'$5\pi/8$', r'$3\pi/4$', r'$7\pi/8$', r'$\pi$', r'$9\pi/8$', r'$5\pi/4$', r'$11\pi/8$', r'$3\pi/2$', r'$13\pi/8$', r'$7\pi/4$', r'$15\pi/8$', r'$2\pi$'])
ax.set_title('正弦函数和圆之间的关系', fontsize=22)

# 初始化线和点
circle_line, = ax.plot([], [], '-r', lw=3)
sine_line, = ax.plot([], [], '-g', lw=3)
connect_line, = ax.plot([], [], '--', lw=3)
arrow_line, = ax.plot([], [], '-bo', lw=3)
vert_line1, = ax.plot([], [], 'k', lw=3)
vert_line2, = ax.plot([], [], 'k', lw=3)
text1 = ax.text(0, 0, '', fontsize=14)
text2 = ax.text(0, 0, '', fontsize=14)

def init():
    circle_line.set_data([], [])
    sine_line.set_data([], [])
    connect_line.set_data([], [])
    arrow_line.set_data([], [])
    vert_line1.set_data([], [])
    vert_line2.set_data([], [])
    text1.set_text('')
    text2.set_text('')
    return circle_line, sine_line, connect_line, arrow_line, vert_line1, vert_line2, text1, text2

def update(i):
    connectLineX = np.linspace(x[i], x1[i], 50)
    connectLineY = np.zeros(50) + y[i]
    arrowX = [-1, x[i]]
    arrowY = [0, y[i]]
    lineX = np.zeros(20) + x[i]
    lineY = np.linspace(0, y[i], 20)
    x3 = np.zeros(20) + x1[i]
    y3 = np.linspace(0, y1[i], 20)

    circle_line.set_data(x[:i], y[:i])
    sine_line.set_data(x1[:i], y1[:i])
    connect_line.set_data(connectLineX, connectLineY)
    arrow_line.set_data(arrowX, arrowY)
    vert_line1.set_data(lineX, lineY)
    vert_line2.set_data(x3, y3)
    
    text1.set_position((x[i] + 0.05, y[i]))
    text1.set_text(f'{omega[i] / np.pi:.2f}$\pi$')
    text2.set_position((x1[i] + 0.05, y1[i]))
    text2.set_text(f'{omega[i] / np.pi:.2f}$\pi$')

    return circle_line, sine_line, connect_line, arrow_line, vert_line1, vert_line2, text1, text2

# 创建动画
ani = FuncAnimation(fig, update, frames=len(omega), init_func=init, blit=True, repeat=True,interval=20)

# 保存动画
writer = PillowWriter(fps=20)
ani.save("sinePhase.gif", writer=writer)

plt.show()

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

加密与安全_ Jasypt (Java Simplified Encryption)不完全指北

文章目录 官网功能概述Code附 官网 http://www.jasypt.org/ 功能概述 Jasypt 是一个 Java 库,它允许开发人员以最小的努力添加基本的加密功能,并且不需要深入了解密码学的工作原理。 高安全性、基于标准的加密技术,适用于单向和双向加密。…

VBA中类的解读及应用第十三讲:限制复选选择,窗体模块的搭建

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。 类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

第十五章 Qt的QGraphics View绘图框架详解

目录 一、视图、场景、图形项 1、Graphics View 绘图架构 1.1、图形项 GraphicsItem 1.2、场景 QGraphicsScene 1.3、视图 QGraphicsView 2、图形项、场景、视图的坐标系 3、Graphics View 基础练习 二、使用自定义视图处理鼠标事件 1、添加自定义视图类 2、使用自定…

【python基础】—calendar模块

文章目录 前言一、calendar模块方法1.firstweekday()2.setfirstweekday(firstweekday)3.isleap(year)4.leapdays(y1, y2)5.weekday(year, month, day)6.monthrange(year, month)7.weekheader(n)8.monthcalendar(year, month)9.prmonth(theyear, themonth, w0, l0)10.prcal(year…

Java WebService记

Web Services开发 常用的 Web Services 框架有 Apache Axis1 、 Apache Axis2 、 Apache CXF ,而 Apache Axis1 已经逐渐被淘汰所以本文不会讨论,重点关注 Apache Axis2 及 Apache CXF 。 Apache Axis2 在IDEA中新建 Axis2Demo 项目后右键选择 添加框架…

Access,Trunk,Hybrid网络设备链接类型详解

带着问题找答案:网络链路上的数据包怎么看,是否携带vlan-id如何看,以及如何设计链接类型满足用户要求,请看如下解析。 第一种:链接类型access 无标记数据帧 第二种:链接类型trunk 第三种&#xf…

java前后端加密解密crypto-js_java crypto

} let srcs CryptoJS.enc.Utf8.parse(word); var encrypted CryptoJS.AES.encrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.ZeroPadding }); return CryptoJS.enc.Base64.stringify(encrypted.ciphertext); } /** 1. AES 解密 :字符…

怎么用AI合成PPT?这5款风靡全球的AIPPT软件一定要知道!

当下我们已进入信息过载的时代,每天有无数的信息试图争夺我们的注意力,与此同时,我们也需要向别人展示和呈现信息,这就要求我们能够以最低的成本,在短时间内引起对方的注意,这其中最常用到的工具非PPT莫属。…

融资融券利率怎么计算,两融交易开通条件和操作流程

融资融券利率 融资融券的利率没有固定的数额,现在融资利率最低是4%~5%,专项融券利率2.99%起,公共券源利率9.35%。 融资利息计算 融资利息是指投资者借入资金进行买入股票时需要支付的利息。 计算公式为:融资利息 融资金额 融…

《ClipCap》论文笔记(下)

原文出处 [2111.09734] ClipCap: CLIP Prefix for Image Captioning (arxiv.org) 原文翻译 接上篇 《ClipCap》论文笔记(上)-CSDN博客 4. Results Datasets.我们使用 COCO-captions [7,22]、nocaps [1] 和 Conceptual Captions [33] 数据集。我们根…

概率论与数理统计_上_科学出版社

contents 前言第1章 事件与概率1.1 随机事件与样本空间1.1.1 样本空间1.1.2 随机事件1.1.3 事件之间的关系与运算 1.2 概率的三种定义及其性质1.2.1 概率的统计定义1.2.2 概率的古典定义1.2.3 概率的几何定义1.2.4 概率的性质 1.3 常用概型公式1.3.1 条件概率计算公式1.3.2 乘法…

【设计模式】设计模式学习线路与总结

文章目录 一. 设计原则与思想二. 设计模式与范式三. 设计模式进阶四. 项目实战 设计模式主要是为了改善代码质量,对代码的重用、解耦以及重构给了最佳实践,如下图是我们在掌握设计模式过程中需要掌握和思考的内容概览。 一. 设计原则与思想 面向对象编…

功能详解-电商接口丨电商API

随着电商平台各类机制日益成熟,电商接口逐渐被大家所熟知,淘宝、天猫、京东、拼多多、抖店、快手、小红书这些都是主流的电商平台,为了提升电商管理系统的效率,开发者可以通过电商接口将多个电商平台的数据和功能集成。 电商接…

海外短剧CPS推广分佣系统平台讲解,他和短剧播放平台有啥区别?

首先来讲讲什么是海外短剧系统?什么是海外短剧cps系统?这俩有何区别? 海外短剧系统 顾名思义:就是做一套海外短剧系统,把剧放在自己的系统内,让用户来充值,充值的钱全部都是我自己的&#xff…

【人工智能】--生成对抗网络

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉GAN 的基本原理 🍈生成器(Generator) 🍈判别器&…

[数据集][目标检测]刀具匕首持刀检测数据集VOC+YOLO格式8810张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8810 标注数量(xml文件个数):8810 标注数量(txt文件个数):8810 标注…

超详细!大模型面经指南(附答案)

目录 大模型(LLMs)基础面 1. 目前 主流的开源模型体系 有哪些? 2. prefix LM 和 causal LM 区别是什么? 3. 涌现能力是啥原因? 4. 大模型LLM的架构介绍? 大模型(LLMs)进阶面 1. l…

mysql:部署MySQL 8.0 环境

mysql网址:MySQL 点击 MySQL Community Server 选择合适的版本 选择8.0版本 下载完成,点击mysql-installer-community-8.0.26.0.msi文件,打开安装向导。 选择自定义安装类型 打开“Select Products” 窗口,可以定制需要安装的产…

Teamviewer删除可信任设备

目前基本上主流的远程连接软件都有限制,要么收费; Teamviewer可信任设备有限,超出限制就会提示错误,需要删除多余的设备才能登陆账号! 需要登陆这个网站 Teamviewer Management console,才能修改&#xff…

高级IO_多路转接之Poll

文章目录 前言一、poll二、poll使用步骤总结 前言 上一章我们学习了select,但是select作为早期的多路转接接口,缺点十分明显,于是又出现poll和epoll等接口,今天我们就来学习一下poll的使用 提示:以下是本篇文章正文内…