推导 模型矩阵的逆转置矩阵求运动物体的法向量

news2024/11/24 15:57:31

一个物体表面的法向量如何随着物体的坐标变换而改变,取决于变换的类型。使用逆转置矩阵,可以安全地解决该问题,而无须陷入过度复杂的计算中。

法向量变化规律

  1. 平移变换不会改变法向量,因为平移不会改变物体的方向。 
  2. 旋转变换会改变法向量,因为旋转改变了物体的方向。
  3. 缩放变换对法向量的影响较为复杂。如上图,最右侧的图显示了立方体先旋转了45度,再在y轴上拉伸至原来的2倍的情况。此时法向量改变了,因为表面的朝向改变了。但是,如果缩放比例在所有的轴上都一致的话,那么法向量就不会变化。

模型矩阵的逆转值矩阵可以用来变换法向量。实际上,在某些特殊情况下,可以通过模型矩阵来确定物体变换后的法向量。比如说,当物体在旋转时,可以用旋转矩阵直接乘以法向量,就能获得旋转后的法向量。总之,计算变换后的物体表面的法向量方向时,是求诸于模型矩阵自身,还是模型矩阵的逆转值矩阵,取决于模型矩阵中已经包含的变换类型(平移、旋转或缩放)。

直接通过模型矩阵自身求变换后的法向量。如果模型矩阵中已经包含了平移变换,法向量就会被当作顶点坐标平移,从而导致法向量与原有的表面朝向不一致。比如说,一个法向量是(1,0,0),沿Y轴平移2.0个单位后,就变成了(1,2,0)。事实上,如果你从4×4的模型矩阵的左上角抽出3×3的子矩阵,然后乘以法向量,就可以避免该问题。如下所示,4*4的模型矩阵:

由于3×3的子矩阵实际上包含了旋转矩阵和缩放矩阵的信息,我们来逐一考虑。

  • 如果只进行旋转操作:

你可以使用模型矩阵的3×3子矩阵对法向量进行变换。如果在变换前法向量已经归一化了,那么变换后的法向量无须再归一化处理。

  • 如果只进行缩放操作(且缩放因子相同):

你可以使用模型矩阵的3×3子矩阵对法向量进行变换。但是,变换后的法向量需要再次归一化处理。

在这种情况下,当你只进行缩放操作且缩放因子相同时,这意味着X轴、Y轴和Z轴的缩放因子是一致的。比如,你希望以一致的缩放因子2.0进行缩放,那么就需要将法向量 3*3 子矩阵 变换后归一化,这时,即使物体的尺寸发生了变化,但是其形状并未改变。

  • 如果进行了缩放操作(但缩放因子不同):

必须使用模型矩阵的逆转值矩阵对法向量进行变换。变换后的法向量必须再次归一化处理。原因如下:

如下图使一个矩形物体(左图)沿Y轴拉伸2.0倍,拉伸后的形状如右图所示。这里,为了获得变换后的法向量,我们试图使用模型矩阵乘以原先的法向量(1,1,0)。但是,得到的结果是(1,2,0),并不垂直于拉伸后的物体表面了。

推导

令模型矩阵为M,令初始的法向量为n,令变换矩阵为M',也就是用来正确变换法向量n的矩阵,令垂直于n的向量为s,令变换后的法向量为n',令垂直于n'的向量为s'

等式一、二

n' =  M' *  n

s' =  M * s

n和s,以及 n'和 s'的关系 ,如下:

现在,我们就来计算M',使得n'和s'的相对角度保持垂直。我们知道两个垂直矢量的点积是0,点乘操作使用点运算符“ · ”表示,所以有:

 n'·  s'=  0

将等式一、二代入并重写上式

从上图中可以看出,M'就是通过转置M的逆矩阵得到的,或者说,M'就是M的逆转置矩阵。因为M已经可能包含了上面列举过的三种变换情况,所以计算M的逆转置矩阵并乘以法向量,就可以获得正确的结果,因此,这才是对法向量进行变换的最佳方法

另,计算逆转置矩阵可能会比较耗时,如果你非常确定物体的变换只包含上述(1)(2)的情形,也可以简单地使用上述 模型矩阵的3×3子矩阵 来对处理法向量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1667146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel办公技巧之下拉菜单

在日常办工中,经常需在单元格中输入特定的值,此时我们可以使用下拉菜单解决,输入错误和错误值,可以一劳永逸的解决固定数据输入问题。 使用Excel下拉菜单时,它在数据输入和验证方面发挥着重要作用通过点击单元格的下拉…

Mp3tag for Mac:音乐标签,轻松管理

还在为杂乱无章的音乐文件而烦恼吗?Mp3tag for Mac,让您的音乐库焕然一新!它支持多种音频格式,批量编辑标签,让音乐管理变得简单高效。同时,自动获取在线数据库的音乐元数据,确保您的音乐库始终…

8种区块链开发者必须知道的顶级编程语言!

我来问你一个问题:请说出一种技术,它以去中心化、不可篡改和透明性等核心特征席卷了全球。 这个问题的答案是,当然是区块链,它在近些年进入大家的视野并颠覆了工商业,没有任何其他技术能够做到这一点。 预计从2020年…

Linux-vi、vim

使用Xshell远程登录到Linux主机进行操作 命令行不用全部掌握, 一般编辑大文件,比较复杂的情况下, 我们还是使用Xftp工具, down下来再恢复回去。

1065: 无向图的连通分量计算

解法&#xff1a; dfs求连通性 1.设节点表vis[] 2.遍历节点表dfs标记&#xff0c;每次得到一个连通分量 #include<iostream> #include<vector> using namespace std; int arr[100][100]; void dfs(vector<bool>& vis, int v) {//不用终止条件&#x…

day10-Set集合

1.Set 那接下来我们来看Collection单列集合体系的第二部分 Set集合。 1.1 Set集合概述和特点 Set集合特点 1.可以去除重复 2.存取顺序不一致 3.没有带索引的方法&#xff0c;所以不能使用普通fori循环遍历&#xff0c;也不能通过索引来获取&#xff0c;删除Set集合里面的元…

WebSocket 详解加入门实操理解加深

WebSocket 介绍 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接…

基于SpringBoot的竹宣非遗宣传网站

摘要 随着互联网的普及和数字化时代的到来&#xff0c;竹编等非物质文化遗产的保护与传承面临新的机遇和挑战。该研究旨在使用SpringBoot后端框架与Vue前端框架&#xff0c;构建一个竹编非遗宣传网站&#xff0c;通过丰富的展示形式和交互体验&#xff0c;提升公众对竹编这一非…

怎么解决端口被占用

目录 一、引言 二、解决方法 一、引言 最近用vscode写网页&#xff0c;老是遇见端口被占用&#xff0c;报错如下&#xff1a; listen tcp :8080: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted. 二、解决方法 1.换…

OpenHarmony 实战开发 - 如何在源码中编译复杂应用(4.0-Release)

文档环境 开发环境&#xff1a;Windows 11 编译环境&#xff1a;Ubuntu 22.04 开发板型号&#xff1a;DAYU 200&#xff08;RK3568&#xff09; 系统版本&#xff1a;OpenHarmony-4.0-Release 功能简介 在 OpenHarmony 系统中预安装应用的 hap 包会随系统编译打包到镜像中&a…

数字水印 | 基于小波变换的数字水印技术

&#x1f34d;原文&#xff1a; 基于小波变换的数字水印技术 &#x1f34d;写在前面&#xff1a; 本文属搬运博客&#xff0c;自己留存学习。 正文 小波变换 把一个信号分解成由基本小波经过移位和缩放后的一系列小波&#xff0c;它是一种 “时间——尺度” 信号的多分辨率分…

# 从浅入深 学习 SpringCloud 微服务架构(十七)--Spring Cloud config(1)

从浅入深 学习 SpringCloud 微服务架构&#xff08;十七&#xff09;–Spring Cloud config&#xff08;1&#xff09; 一、配置中心的 概述 1、配置中心概述 对于传统的单体应用而言&#xff0c;常使用配置文件来管理所有配置&#xff0c;比如 SpringBoot 的 application.y…

面试中算法(金矿)

有一位国王拥有5座金矿&#xff0c;每座金矿的黄金储量不同&#xff0c;需要参与挖掘的工人人数也不同。 例如&#xff0c;有的金矿储量是5ookg黄金&#xff0c;需要5个工人来挖掘;有的金矿储量是2ookg黄金&#xff0c;需要3个工人来挖掘...... 如果参与挖矿的工人的总数是10。…

HTTP 连接详解

概述 世界上几乎所有的 HTTP 通信都是由 TCP/IP 承载的&#xff0c;客户端可以打开一条TCP/IP连接&#xff0c;连接到任何地方的服务器。一旦连接建立&#xff0c;客户端和服务器之间交换的报文就永远不会丢失、受损或失序 TCP&#xff08;Transmission Control Protocol&…

【大数据】HDFS、HBase操作教程(含指令和JAVA API)

目录 1.前言 2.HDFS 2.1.指令操作 2.2.JAVA API 3.HBase 3.1.指令操作 3.2.JAVA API 1.前言 本文是作者大数据专栏系列的其中一篇&#xff0c;前文中已经详细聊过分布式文件系统HDFS和分布式数据库HBase了&#xff0c;本文将会是它们的实操讲解。 HDFS相关前文&#x…

商家转账到零钱怎么开通?一步步教你玩转微信营销新利器

在数字化营销日新月异的今天&#xff0c;微信支付凭借其便捷、安全的特点&#xff0c;成为了商家不可或缺的支付工具。而其中的“商家转账到零钱”功能&#xff0c;更是为商家提供了一个全新的营销利器。今天&#xff0c;我们就来详细解读一下如何开通这一功能&#xff08;我处…

强化学习在一致性模型中的应用与实验验证

在人工智能领域&#xff0c;文本到图像的生成任务一直是研究的热点。近年来&#xff0c;扩散模型和一致性模型因其在图像生成中的卓越性能而受到广泛关注。然而&#xff0c;这些模型在生成速度和微调灵活性上存在局限。为了解决这些问题&#xff0c;康奈尔大学的研究团队提出了…

从0开始学python(七)

目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构&#xff0c;包括for和while的使用。本章接着往下讲。…

springboot+layuimini实现树形表格

树形表格实现增删改查 这里写目录标题 效果图前端页面代码前端插件后端代码controllerserviceserviceImpl 实现类Entitymapperxml mybatis代码数据表 效果图 前端页面代码 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"&g…

java项目之企业OA管理系统源码(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的企业OA管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 企业OA管理系统的主要使用…