如何用,向量表示3维空间种的有向线段(4,2,3)

一、画 三个坐标

等轴测投影"(isometric projection)风格的手绘风格三维图,即三条坐标轴(X, Y, Z)看起来彼此垂直、等角分布(通常是 120° 夹角),它是常见于教材和数学书籍的 "假三维"表示法。

展示了一个三轴(X, Y, Z)坐标系,并标记了每个坐标轴上 5 个刻度值:

X轴:水平向右(0°)。

Y轴:相对于X轴 顺时针120°。

Z轴:与X轴垂直(90°),竖直向上。

二、画出最终向量 V(4, 2, 3) 的 终点在二维投影下的坐标\

  1. 基础知识:

vx = x * ux

  • x = 4,表示向量在 X 方向的分量是 4

  • ux 是 X 轴方向的单位向量(也就是 np.array([1, 0])

  • 所以:vx = x * ux = 4 * [1, 0] = [4, 0],意思是"从原点出发,沿 X 方向走 4 单位"

这就是 X 分量终点的坐标

  • vx = x * ux:X分量终点

  • vxy = vx + y * uy:在 vx 的基础上再加上 Y 分量

  • vxyz = vxy + z * uz:在 vxy 的基础上再加上 Z 分量

vxyz 是最终向量 V(4, 2, 3) 的 终点在二维投影下的坐标

2.辅助注释来明确三段虚线(投影):

  1. X 轴分量(X分量 → XY 分量)

  2. Y 轴分量(Y分量 → xy 分量)

  3. Z 轴分量(xy 分量 → xyz 点)

复制代码
1. X分量虚线 blue 

ax.plot([vx[0], vxy[0]], [vx[1], vxy[1]], linestyle='dotted', color='blue')

2.Y 轴分量

复制代码
#Y 分量 → XY 合成分量
ax.plot([vy[0], vxy[0]], [vy[1], vxy[1]], linestyle='dotted', color='purple')

3. Z分量虚线

ax.plot(vxy\[0, vxyz0], vxy\[1, vxyz1], linestyle='dotted', color='yellow')

复制代码
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑体
plt.rcParams['axes.unicode_minus'] = False    # 正常显示负号
import numpy as np

fig, ax = plt.subplots(figsize=(6, 6))
ax.set_aspect('equal')

origin = np.array([0, 0])
length = 5

# 单位向量
ux = np.array([np.cos(np.radians(0)), np.sin(np.radians(0))])       # X轴:0°
uy = np.array([np.cos(np.radians(-120)), np.sin(np.radians(-120))]) # Y轴:顺时针120°
uz = np.array([np.cos(np.radians(90)), np.sin(np.radians(90))])     # Z轴:垂直向上

# 绘制坐标轴
ax.arrow(*origin, *(ux * length), head_width=0.2, length_includes_head=True, color='black')
ax.arrow(*origin, *(uy * length), head_width=0.2, length_includes_head=True, color='black')
ax.arrow(*origin, *(uz * length), head_width=0.2, length_includes_head=True, color='black')

# 标注轴名
ax.text(*(ux * (length + 0.3)), 'X', fontsize=12, ha='center', va='center')
ax.text(*(uy * (length + 0.3)), 'Y', fontsize=12, ha='center', va='center')
ax.text(*(uz * (length + 0.3)), 'Z', fontsize=12, ha='center', va='bottom')

# 添加刻度
for i in range(1, length + 1):
    # X轴
    tick_x = origin + ux * i
    ax.plot([tick_x[0], tick_x[0]], [tick_x[1] - 0.1, tick_x[1] + 0.1], color='black')
    ax.text(tick_x[0], tick_x[1] - 0.3, str(i), ha='center', va='top', fontsize=10)

    # Y轴
    tick_y = origin + uy * i
    offset_y = np.array([-uy[1], uy[0]])  # 垂直方向
    ax.plot([tick_y[0] - 0.1 * offset_y[0], tick_y[0] + 0.1 * offset_y[0]],
            [tick_y[1] - 0.1 * offset_y[1], tick_y[1] + 0.1 * offset_y[1]], color='black')
    ax.text(tick_y[0] + 0.25 * offset_y[0], tick_y[1] + 0.25 * offset_y[1],
            str(i), ha='center', va='center', fontsize=10)

    # Z轴
    tick_z = origin + uz * i
    ax.plot([tick_z[0] - 0.1, tick_z[0] + 0.1], [tick_z[1], tick_z[1]], color='black')
    ax.text(tick_z[0] - 0.3, tick_z[1], str(i), ha='right', va='center', fontsize=10)

# ========== 添加向量 (4, 2, 3) ==========
x, y, z = 4, 2, 3

# 计算各个分量点
vx = x * ux                    # X分量点
vxy = vx + y * uy              # X + Y 分量点
vxyz = vxy + z * uz            # 向量终点 (4, 2, 3)

# 主向量箭头(红色)
ax.arrow(*origin, *(vxyz - origin), head_width=0.2, length_includes_head=True, color='red')
ax.text(*(vxyz + 0.3), 'V(4,2,3)', color='red', fontsize=12)

#Y 分量 → XY 合成分量
vy = y * uy
ax.plot([vy[0], vxy[0]], [vy[1], vxy[1]], linestyle='dotted', color='purple')


# X分量虚线
ax.plot([vx[0], vxy[0]], [vx[1], vxy[1]], linestyle='dotted', color='blue')

# Z分量虚线
ax.plot([vxy[0], vxyz[0]], [vxy[1], vxyz[1]], linestyle='dotted', color='yellow')

# 可视区域与关闭坐标轴
ax.set_xlim(-6, 6)
ax.set_ylim(-4, 6)
ax.axis('off')

plt.title('三维等轴测投影:X(0°), Y(顺时针120°), Z(90°)')
plt.show()

相关推荐
2601_954526752 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
叩码以求索3 小时前
浅谈:算法萌新如何高效刷题应对面试(一)
算法·面试·职场和发展
c238564 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
aaaameliaaa5 小时前
指针之总结
c语言·笔记·算法
宵时待雨6 小时前
优选算法专题9:哈希表
数据结构·算法·散列表
txzrxz6 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列
gwf2166 小时前
磨损均衡算法(Wear Leveling)——SSD如何让每块闪存“公平退休“?
运维·数据库·人工智能·python·嵌入式硬件·算法·智能硬件
noipp6 小时前
推荐题目:洛谷 P6231 [JSOI2013] 公交系统
c语言·数据结构·c++·算法·游戏·洛谷·luogu
c238566 小时前
C/C++每日一练6
c语言·c++·算法
AI小码7 小时前
把动作「画」给视频世界模型,跨本体双向推演,李飞飞参与
大数据·人工智能·算法·ai·大模型·音视频·编程