1、定义镜像矩阵
2、以下是镜像矩阵的展开
3、2维度空间和3维空间的镜像矩阵的表达式,首先是2维空间,对于2-D空间的某个条直线做镜像,假设该直线的单位法向量u(x,y),由计算得到2-D空间的镜像矩阵:
对于3-D空间的某平面做镜像:
4、项目中的代码实现(3D空间)
/**
* 计算镜像矩阵
*
* @param { Vector3 } v3 归一化向量(通常是面法向量)
* @returns { Matrix4 } 镜像矩阵
*/
export const calculationReflection = v3 => {
return new Matrix4().set(
1 - 2 * v3.x * v3.x, - 2 * v3.y * v3.x, - 2 * v3.z * v3.x, 0,
- 2 * v3.x * v3.y, 1 - 2 * v3.y * v3.y, - 2 * v3.z * v3.y, 0,
- 2 * v3.x * v3.z, - 2 * v3.y * v3.z, 1 - 2 * v3.z * v3.z, 0,
0, 0, 0, 1,
)
}
任意向量(这里指3维向量)乘以镜像矩阵,该向量会线性变换到的镜像位置。
总结:由于镜像矩阵是由单位向量生成。所以,实际运用中,在计算单位法向量之前需要记录原始法向量作为偏移的数据依据,再根据矩阵与逆矩阵的线性关系计算镜像后的准确信息。