绘制三维直角坐标系、网格和向量的线性变换的动画python代码
时间: 2024-04-30 16:18:51 浏览: 133
以下是一份绘制三维直角坐标系、网格和向量的线性变换的动画 Python 代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation
# 定义三维坐标系
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.set_xlim([-5, 5])
ax.set_ylim([-5, 5])
ax.set_zlim([-5, 5])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 绘制网格
X, Y, Z = np.mgrid[-5:6, -5:6, -5:6]
ax.plot_wireframe(X, Y, Z, color='gray', alpha=0.5)
# 定义向量
v = np.array([1, 2, 3])
v_len = np.linalg.norm(v)
v /= v_len
# 绘制向量
q = ax.quiver(0, 0, 0, v[0], v[1], v[2], color='r')
# 定义线性变换矩阵
M = np.array([
[1, 0, 0],
[0, 1, 0],
[0, 0, 0.5]
])
# 定义动画函数
def animate(i):
global v
# 进行线性变换
v = M @ v
v_len = np.linalg.norm(v)
v /= v_len
# 更新向量
q.set_UVC(v[0], v[1], v[2])
# 更新标题
ax.set_title(f'Linear Transformation (Frame {i+1})')
# 创建动画
anim = FuncAnimation(fig, animate, frames=20, interval=100)
plt.show()
```
这段代码首先定义了一个三维坐标系,并绘制了一个网格。然后定义了一个三维向量 `v`,并绘制了这个向量。接着定义了一个线性变换矩阵 `M`,并在动画函数中对向量进行线性变换,更新向量,以及更新标题。最后通过 `FuncAnimation` 创建动画并显示出来。
阅读全文