import matplotlib.pyplot as plt
import numpy as np
设置Matplotlib字体以支持中文
plt.rcParams'font.sans-serif' = 'SimHei' # 设置中文显示
plt.rcParams'axes.unicode_minus' = False # 解决负号显示问题
设置绘图
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
定义向量 a 和 b
a = np.array(1, 2, 3)
b = np.array(4, 5, 6)
origin = np.array(0, 0, 0)
计算向量和
c = a + b
计算向量点积
dot_product = np.dot(a, b)
计算向量叉积
cross_product = np.cross(a, b)
绘制向量
ax.quiver(*origin, *a, color='r', label='向量 a = 1, 2, 3', linewidth=2, arrow_length_ratio=0.1)
ax.quiver(*origin, *b, color='b', label='向量 b = 4, 5, 6', linewidth=2, arrow_length_ratio=0.1)
ax.quiver(*origin, *c, color='g', label=f'向量 a+b = {c.tolist()}', linewidth=2, arrow_length_ratio=0.1)
ax.quiver(*origin, *cross_product, color='purple', label=f'向量 a×b = {cross_product.tolist()}', linewidth=2, arrow_length_ratio=0.1)
添加点积信息
ax.text2D(0.05, 0.95, f'向量a·向量b = {dot_product}', transform=ax.transAxes, fontsize=10, verticalalignment='top', bbox=dict(boxstyle='round', alpha=0.1))
添加辅助线 - 向量a的投影和垂线
向量a在x轴的投影
ax.plot(origin\[0, a0], origin\[1, origin1], origin\[2, origin2], 'r--', alpha=0.5)
向量a在y轴的投影
ax.plot(origin\[0, origin0], origin\[1, a1], origin\[2, origin2], 'r--', alpha=0.5)
向量a在z轴的投影
ax.plot(origin\[0, origin0], origin\[1, origin1], origin\[2, a2], 'r--', alpha=0.5)
从向量a终点到x轴的垂线
ax.plot(a\[0, a0], a\[1, origin1], a\[2, origin2], 'r--', alpha=0.5)
从向量a终点到y轴的垂线
ax.plot(a\[0, origin0], a\[1, a1], a\[2, origin2], 'r--', alpha=0.5)
从向量a终点到z轴的垂线
ax.plot(a\[0, origin0], a\[1, origin1], a\[2, a2], 'r--', alpha=0.5)
添加辅助线 - 向量b的投影和垂线
向量b在x轴的投影
ax.plot(origin\[0, b0], origin\[1, origin1], origin\[2, origin2], 'b--', alpha=0.5)
向量b在y轴的投影
ax.plot(origin\[0, origin0], origin\[1, b1], origin\[2, origin2], 'b--', alpha=0.5)
向量b在z轴的投影
ax.plot(origin\[0, origin0], origin\[1, origin1], origin\[2, b2], 'b--', alpha=0.5)
从向量b终点到x轴的垂线
ax.plot(b\[0, b0], b\[1, origin1], b\[2, origin2], 'b--', alpha=0.5)
从向量b终点到y轴的垂线
ax.plot(b\[0, origin0], b\[1, b1], b\[2, origin2], 'b--', alpha=0.5)
从向量b终点到z轴的垂线
ax.plot(b\[0, origin0], b\[1, origin1], b\[2, b2], 'b--', alpha=0.5)
添加向量a和b之间的连线
ax.plot(a\[0, b0], a\[1, b1], a\[2, b2], 'g--', alpha=0.7, label='向量a和b的连线')
设置坐标轴范围
all_values = np.concatenate(a, b, c, cross_product)
min_range = all_values.min()
max_range = all_values.max()
ax.set_xlim(min_range - 1, max_range + 1)
ax.set_ylim(min_range - 1, max_range + 1)
ax.set_zlim(min_range - 1, max_range + 1)
添加标签和标题
ax.set_xlabel('X 轴')
ax.set_ylabel('Y 轴')
ax.set_zlabel('Z 轴')
ax.set_title('三维向量 a 和 b 的空间示意图')
ax.legend()
ax.grid(True)
显示图形
plt.show()