创建一个显示正弦曲线上点移动的动画

要制作一个具有动漫效果的圆点沿曲线的动画,并时刻显示圆点的坐标位置,你需要使用一个编程语言和库来实现这个功能。以下是使用Python和其流行的绘图库matplotlib来实现这一目标的一个基本示例。

示例:

  1. 使用以下代码创建一个简单的动画:


	import numpy as np 

	import matplotlib.pyplot as plt 

	import matplotlib.animation as animation 

	


	# 定义曲线函数 

	def curve(t): 

	x = t * np.cos(2 * np.pi * t) 

	y = t * np.sin(2 * np.pi * t) 

	return x, y 

	


	# 初始化函数,设置初始圆点位置 

	def init(): 

	point.set_offsets([(0, 0)]) # 设置初始位置为(0, 0) 

	return point, 

	


	# 动画更新函数,用于更新圆点的位置和坐标显示 

	def update(frame): 

	t = frame / 10 # 将帧数转换为时间 

	x, y = curve(t) # 计算曲线上的点坐标 

	point.set_offsets([(x, y)]) # 更新圆点的位置 

	ax1.text(x, y, f"({round(x, 2)}, {round(y, 2)})", ha="center", va="center", size=12) # 显示圆点的坐标位置 

	return point, ax1.texts[-1], # 返回圆点和其坐标文本,以便在下一帧中使用 

	


	# 创建图形和坐标轴 

	fig, ax = plt.subplots() 

	ax1 = plt.axes([0.025, 0.85, 0.95, 0.1]) # 创建一个用于显示坐标文本的子图区域 

	ax.set_xlim(-2, 2) # 设置x轴的范围 

	ax.set_ylim(-2, 2) # 设置y轴的范围 

	ax.grid(False) # 不显示网格线 

	ax1.axis('off') # 不显示子图区域的轴线 

	


	# 创建初始圆点和坐标文本对象 

	point = plt.Circle((0, 0), 0.1, fill=True, color='blue') 

	ax.add_artist(point) # 将圆点添加到图形中 

	point_label = ax1.text(0, 0, "") # 初始坐标文本对象 

	


	# 创建动画对象,设置参数和循环等属性 

	ani = animation.FuncAnimation(fig, update, frames=np.linspace(0, 100, 100), interval=50, blit=True) 

	ani.save("animated_curve.gif", writer="imagemagick") # 将动画保存为GIF文件,需要安装ImageMagick库 

	plt.show() # 显示图形和动画

运行上述代码。它应该会生成一个动态的曲线动画,其中有一个蓝色的圆点沿着曲线移动,并且在每个位置上都显示其坐标。动画还会保存为一个GIF文件。你可以根据需要调整代码以更改圆点的大小、颜色、速度、曲线形状

实验:

# animation为动画模块
%matplotlib notebook 
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
 
# 0. 设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
 
 
# 1. 准备正弦曲线数据
shang = np.linspace(0, 2*np.pi, 100)
xia = np.sin(x)
 
 
# 2. 创建画布和坐标系
fig = plt.figure(tight_layout=True)
ax = fig.add_subplot(111)
 
# 3. 绘制正弦曲线,同时把曲线改成蓝色
ax.plot(shang, xia, color='b')
 
 
# 4(1). 动画设计,其中num代表当前动画的帧率
def chenduxiu(num):
    point_ani.set_data(x[num], y[num])    
    text_pt.set_text("x=%.3f, y=%.3f"%(x[num], y[num]))
    return point_ani,text_pt
# 4(2). 曲线上红色圆点设置 
plt.plot(x,y)
point_ani, = plt.plot(x[0], y[0], "ro")
text_pt = plt.text(4, 0.9, '', fontsize=16)
# 4(3).制作动画,其中frames表示动画的长度,即曲线上红色圆点移动的范围,interval表示更新动画的频率,blit表示是否更新所有的点 
ani = animation.FuncAnimation(fig, chenduxiu, frames=100, interval=90, blit=True)
 
# 5.将动画保存为gif图片(用于上传博客)
ani.save("pratice7.3.gif", writer='pillow')
 
# 6.展示图表
plt.show()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以使用 Python 中的 matplotlib 库来绘制正弦曲线,并通过动画实现圆点在曲线上移动。 以下是示例代码: ```python import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # 定义 x 轴范围 x = np.linspace(0, 2*np.pi, 200) # 绘制正弦曲线 fig, ax = plt.subplots() ax.set_xlim(0, 2*np.pi) ax.set_ylim(-1, 1) ax.plot(x, np.sin(x)) # 定义圆点和其位置 dot, = ax.plot(0, np.sin(0), 'ro') xdata, ydata = [], [] # 更新圆点位置的函数 def update(frame): xdata.append(frame) ydata.append(np.sin(frame)) dot.set_data(xdata, ydata) dot.set_markersize(10) dot.set_markerfacecolor('r') dot.set_markeredgecolor('k') ax.set_title(f'x={frame:.2f}, y={np.sin(frame):.2f}') return dot, # 创建动画对象 anim = FuncAnimation(fig, update, frames=x, interval=50, blit=True) # 显示动画 plt.show() ``` 代码解释: - `np.linspace(0, 2*np.pi, 200)` 定义了 x 轴范围,其中 `200` 表示将正弦曲线分成 200 个点来绘制。 - `ax.plot(x, np.sin(x))` 绘制正弦曲线。 - `dot, = ax.plot(0, np.sin(0), 'ro')` 定义圆点,并将其初始位置设置在 `(0, sin(0))` 处。 - `update(frame)` 定义了更新圆点位置的函数,其中 `frame` 表示当前动画帧所对应的 x 值。 - `anim = FuncAnimation(fig, update, frames=x, interval=50, blit=True)` 创建动画对象,其中 `frames=x` 表示动画将在 `x` 上运行,`interval=50` 表示每个动画帧之间的间隔为 50 毫秒,`blit=True` 表示只绘制变化的部分,以提高性能。 运行代码后,应该可以看到一个绘制了正弦曲线的窗口,其中有一个红色的圆点在曲线上移动,同时在窗口标题中显示圆点的坐标。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值