当前位置: 首页 > news >正文

三维仿射变换-简略版

三维仿射变换(3D Affine Transformation)是三维空间中通过线性变换(旋转、缩放、剪切)和平移组合实现的几何变换,有以下特性:
1、直线性:直线变换后仍为直线;
2、平行性:平行平面变换后仍平行;
3、共线比例不变性:线段上点的相对比例保持不变。

数学表示与变换类型

  • 数学表示:齐次坐标与4×4矩阵
  • 平移(Translation)
  • 缩放(Scaling)
  • 旋转(Rotation)
  • 剪切(Shear)
  • 代码实现

数学表示:齐次坐标与4×4矩阵

三维仿射变换通常使用齐次坐标和4×4矩阵表示,以便统一处理平移和线性变换:
在这里插入图片描述
线性变换部分:左上3×3子矩阵,控制旋转、缩放、剪切:
在这里插入图片描述
平移向量:右侧列向量 在这里插入图片描述 控制位移。

平移(Translation)

仅改变位置,形状和方向不变(角标x、y,z 表示3个维度的方向):
在这里插入图片描述

缩放(Scaling)

沿坐标轴按比例放大或缩小:

在这里插入图片描述

  • 均匀缩放:S x​ =Sy =Sz ;
  • 非均匀缩放:比例不同导致形变。

旋转(Rotation)

绕坐标轴旋转角度θ,常用旋转矩阵:

  • 绕X轴:

在这里插入图片描述

  • 绕Y轴

在这里插入图片描述

  • 绕Z轴
    在这里插入图片描述

剪切(Shear)

沿某一方向倾斜变形:
X方向剪切(影响Y和Z):
在这里插入图片描述
Y方向剪切(影响X和Z):
在这里插入图片描述

代码实现

NumPy:使用4×4矩阵进行变换计算。

import numpy as np

# 定义点(齐次坐标)
point = np.array([1, 2, 3, 1])

# 绕Y轴旋转90度 + 平移(5,0,0)
M = np.array([
    [0, 0, 1, 5],
    [0, 1, 0, 0],
    [-1, 0, 0, 0],
    [0, 0, 0, 1]
])

# 应用变换
transformed_point = M @ point
print(transformed_point[:3])  # 输出 [8, 2, -1]

相关文章:

  • 【合新通信】---射频光模块
  • Deepseek使用技巧大全
  • Redis主从复制(Master-Slave Replication)解析与搭建操作指南
  • L2TP实验 作业
  • 每日OJ_牛客_DP44兑换零钱_C++_Java
  • Pytorch中layernorm实现详解
  • C语言基础(函数)
  • 正则魔法:解码 return /^\d+$/.test(text) ? text : ‘0‘ 的秘密
  • 【笔记】深度学习模型训练的 GPU 内存优化之旅:重计算篇
  • 2025最新电脑IP地址修改方法:Win系统详细步骤
  • springboot使用163发送自定义html格式的邮件
  • 为什么TCP需要三次握手?一次不行吗?
  • 【Servlet 容器和 Spring 容器的关系】
  • 人工智能之数学基础:线性方程组
  • mysql-innodb存储引擎主键索引叶子结点数据结构(非单纯的双向链表)
  • PyCharm安装redis,python安装redis,PyCharm使用失败问题
  • WPF 布局舍入(WPF 边框模糊 或 像素错位 的问题)
  • Datawhale coze-ai-assistant 笔记4
  • 16 预编译指令
  • 再学:ERC20-Permit2、SafeERC20方法 详解ERC721,如何铸造一个NFT以及IPFS的作用
  • BNEF:亚洲、中东和非洲是电力基础设施投资的最大机会所在
  • 中日友好医院通报“医师肖某被举报”:基本属实,开除党籍并解聘
  • 广州一人均500元的日料店回收食材给下一桌?市场监管部门介入调查
  • 楼下电瓶车起火老夫妻逃生时被烧伤,消防解析躲火避烟注意事项
  • QFII一季度现身超300家公司:持有南京银行市值最高,5家青睐立航科技
  • 谁将主导“视觉大脑”?中国AI的下一个超级赛道