如何用,向量表示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], vxyz[0]], [vxy[1], vxyz[1]], 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()

相关推荐
Haohao+++1 小时前
Stable Diffusion原理解析
人工智能·深度学习·算法
ideaout技术团队4 小时前
leetcode学习笔记2:多数元素(摩尔投票算法)
学习·算法·leetcode
代码充电宝4 小时前
LeetCode 算法题【简单】283. 移动零
java·算法·leetcode·职场和发展
不枯石6 小时前
Matlab通过GUI实现点云的均值滤波(附最简版)
开发语言·图像处理·算法·计算机视觉·matlab·均值算法
不枯石6 小时前
Matlab通过GUI实现点云的双边(Bilateral)滤波(附最简版)
开发语言·图像处理·算法·计算机视觉·matlab
白水先森8 小时前
C语言作用域与数组详解
java·数据结构·算法
想唱rap9 小时前
直接选择排序、堆排序、冒泡排序
c语言·数据结构·笔记·算法·新浪微博
老葱头蒸鸡10 小时前
(27)APS.NET Core8.0 堆栈原理通俗理解
算法
视睿10 小时前
【C++练习】06.输出100以内的所有素数
开发语言·c++·算法·机器人·无人机
柠檬071111 小时前
matlab cell 数据转换及记录
算法