首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >围绕模型自己的轴旋转模型

围绕模型自己的轴旋转模型
EN

Stack Overflow用户
提问于 2010-01-11 13:48:59
回答 2查看 16.3K关注 0票数 6

假设我有一个简单的WPF 3D场景,其中一个矩形绕X轴旋转-45度,如下所示:

这为我提供了以下内容:

现在我想将图像旋转45度

模型的Z轴

..。如果我像这样放入第二个RotateTransform3D:

它围绕

场景的

Z轴。对于这个特殊的X旋转,我计算出我需要的是:

但在这一点上,我的数学不及格。谁能告诉我如何计算任意旋转的"A“(和"B”,如果你愿意)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-13 15:14:53

好的,我和一个数学家朋友谈过了,他给了我答案:

所以我认为如果你围绕向量(1,0,0)旋转一个'a‘的角度(也就是绕x轴旋转,这样你的对象在y-z平面上变换),你需要做的就是。

还有更多的旋转

x‘- (1,0,0)保持不变!

y‘- (0,cosa,新浪)

z‘- (0,-sina,cosa)

类似的原理也适用于x-z平面(0,1,0)中的旋转。

x‘- (-sina,0,cosa)

y‘- (0,1,0) -相同

z‘- (sina,o,cosa)

在x-y平面上(0,0,1)

x‘- (-sina,cosa,0)

y‘- (cosa,sina,0)

z‘- (0,0,1)保持不变

塔达!

更新:我创建了一个函数来计算一个矩阵,它将在所有3个轴上旋转一个对象。这可以与MatrixTransform3D一起使用。

代码语言:javascript
运行
AI代码解释
复制
Matrix3D CalculateRotationMatrix(double x, double y, double z)
    {
        Matrix3D matrix = new Matrix3D();

        matrix.Rotate(new Quaternion(new Vector3D(1, 0, 0), x));
        matrix.Rotate(new Quaternion(new Vector3D(0, 1, 0) * matrix, y));
        matrix.Rotate(new Quaternion(new Vector3D(0, 0, 1) * matrix, z));

        return matrix;
    }
票数 14
EN

Stack Overflow用户

发布于 2021-02-28 07:26:23

您得出的答案包含三种不同的旋转,提供了可应用于对象的单个变换矩阵。这是可行的,但考虑到问题的措辞,这是不必要的。

在所描述的问题中,您希望平面围绕其Z轴旋转,但随后旋转的结果是围绕

场景的

X轴,如下所示:

这是将你想出的转换添加到原始转换的结果,即使用如下所示的分组转换:

问题是,你实际上首先遇到的唯一问题是,你以错误的顺序组合了原始变换,至少在上述问题的情况下是这样的。只需插入Z轴旋转即可实现完全相同的结果

之前

X轴旋转,而不是之后:

事实上,你在你的答案中发布的方法实际上只是完成相同作文的另一种方式。如果您将

从调用您的方法返回的值,传递

,即

方法返回的值基本上是相同的。

属性用于如上所述声明(或在代码隐藏中初始化)的组。

它看起来是一种不同的方法的唯一原因是,在直接处理矩阵数学时(正如您的方法所做的那样),与使用

对象进行组合(因为该对象颠倒了组合,以便它在XAML声明中更自然地出现)。

(我说“本质上”,是因为由于计算四元数的额外步骤引入的舍入误差,在一些矩阵分量中存在非常微小的差异。例如,当对旋转进行分组时,

组件具有值

,而使用您的方法的相同组件有价值

..。矩阵不会进行完全相同的比较,但它们在应用于场景中的对象时具有完全相同的视觉效果。)

现在,在代码隐藏中计算矩阵没有任何问题,如果这是您的代码需要架构的方式。使用四元数是一种行之有效的方法,特别是对于在两个不同旋转之间进行插值的目的(即,您希望为旋转设置动画并为此轻松计算中间旋转)。

但我认为重要的是要理解,并没有真正的“围绕自己的轴旋转一个物体”这样的东西。对象的变换总是相对于它所在的坐标空间发生,而不是相对于它自己的局部坐标空间。当对象相对于其父对象(无论是整个场景、顶级对象,还是场景中第一个对象是其子对象的某个其他对象)进行旋转或变换时,都会始终移动后者以保持与对象本身对齐。

在WPF中有许多不同的方法来组成3D变换矩阵,但它们实际上都归结为一件事:将两个或更多个矩阵相乘以得到最终的一个。甚至在通过场景对象图中的父/子关系将变换应用于不同对象时也是如此。事实上,在3D渲染API中,使用对象的层次关系更为惯用

如果您打算让给定对象仅围绕其自身的单个轴旋转

..。也就是说,在您的示例中,您可以为对象指定一个父对象,将X轴旋转应用于该父对象,然后仅将Z轴旋转应用到子对象。

例如,像这样的东西:

同样,同样的结果,只是用不同的方式来表示矩阵的组成。在这种情况下,这将是表示变换的一种更自然的方式,在这种情况下,渲染的平面应该只围绕“它自己的”Z轴旋转,但仍然相对于场景中也移动和/或旋转的某些父对象移动和/或旋转(例如,关节机械臂上的手、汽车上的轮子或某些作战车辆上的角楼,举几个经常出现在3D渲染场景中的示例)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2042214

复制
相关文章
Double为什么会丢失精度
在工作中,谈到有小数点的加减乘除都会想到用BigDecimal来解决,但是有很多人对于double或者float为啥会丢失精度一脸茫然。还有BigDecimal是怎么解决的?话不多说,我们开始。
用户4283147
2022/10/08
2.4K0
Double为什么会丢失精度
VS2017 安装 Microsoft Visual Studio Installer Project
1.安装打包插件:Microsoft Visual Studio 2017安装程序项目
全栈程序员站长
2022/09/09
2.7K0
VS2017 安装 Microsoft Visual Studio Installer Project
如何修复Ubuntu 14.04 系统设置丢失的问题
其实遇到这个问题的一个最主要的原因是之前执行过卸载ibus输入法的操作,所以为了避免这个问题请不要卸载ibus输入法,大家依然可以安装fcitx输入法使用。
WindCoder
2018/09/19
2.1K0
如何修复Ubuntu 14.04 系统设置丢失的问题
VS2019内C语言头文件丢失
安装VS 2019 的时候。嫌弃占用空间大 然后就没有安装 之后编译程序出现没有头文件的问题 先点击这里 在C++的这里把SDK重新装上 记得关闭自己的程序 安装,稍等片刻 接着就成功了
云深无际
2021/03/12
1.1K0
VS2019内C语言头文件丢失
jenkins修改安全策略,权限设置丢失
默认的jenkins用户权限,通过插件Role-based Authorization Strategy来设置的。
py3study
2020/04/08
1.8K0
vs2010设置问题
解决办法:拷贝整个Microsoft Help Viewer覆盖以前的文件,覆盖后可能会遇到vs中F1帮助或者菜单栏里的选项失效,需要手动启动help libary代理解决。
sofu456
2019/07/09
8900
vs2010设置问题
高效的编码:我的VS Code设置
代码编辑器很多,有些是免费的,有些是付费的。其中最喜欢的代码编辑器是 Visual Studio Code。它是免费的,并具有惊人的功能。我从 Web 开发旅程的开始就开始使用它。
张张
2020/03/18
1.8K0
高效的编码:我的VS Code设置
VS2010Web默认的浏览器设置和VS里调试JavaScript代码的设置
   重装系统后,VS调用的Web浏览器不是IE了,VS调式不了JavaScript代码了。这两天一直在试终于搞定了。这里查找的问题当然主要是VS里面调式JavaScript代码了。
aehyok
2018/09/11
1.2K0
VS2010Web默认的浏览器设置和VS里调试JavaScript代码的设置
explicit_defaults_for_timestamp参数详解
explicit_defaults_for_timestamp 系统变量决定MySQL服务端对timestamp列中的默认值和NULL值的不同处理方法。此变量自MySQL 5.6.6 版本引入,分为全局级别和会话级别,可动态更新,默认值为OFF。本文主要介绍该参数打开和关闭情况下对timestamp的影响 。
MySQL技术
2019/09/08
4.6K0
Infor ERP LN有用的Session:ttstpdeldeflt Remove User Defaults
在使用Infor ERP LN的过程中,由于网络中断或者不稳定经常会出现用户打开某个Session的时候报错,信息类似如下:
崔文远TroyCui
2020/12/01
6240
Infor ERP LN有用的Session:ttstpdeldeflt Remove User Defaults
Mac vs code自动换行设置
windows 的话可以设置 wordwrap,但是 mac 的内置格式化插件好像有问题,我试了改 wordwrap 的值不管用。 有个更简单的方法,只要 option+z【alt+z】 就好了。
小蓝枣
2020/09/23
2.2K0
VS 2017打开老项目报错:Project Target Framework Not Installed
由于笔记本硬盘转速太慢,把光驱拆了,装了一个光驱位硬盘支架,搞了块250G的三星SSD固态硬盘,然后使用Samsung Data Migration,花了近2个小时把C盘近200G文件无损迁移到新硬盘,然后将笔记本启动项修改为Bay(这里耗费了好多时间去测试),老机器重获新生!
崔文远TroyCui
2019/02/26
9940
VS 2017打开老项目报错:Project Target Framework Not Installed
杂记随笔:唤醒丢失问题 & 条件变量 vs 信号量
在没有新消息进入的时候,receiver 应该放弃共享缓冲区的锁,然后进入睡眠等待 sender 唤醒。 然而上述代码的问题在于,「放弃缓冲区锁」和「进入睡眠」不是一步原子操作,而是独立的两步操作。
Miigon
2022/10/27
7180
explicit_defaults_for_timestamp参数导致复制中断
explicit_defaults_for_timestamp是从5.6.6引入的一个新参数,默认是off。 作用:对TIMESTAMP类型列的默认值和NULL值的处理,是否启用非标准特性。 默认情况下,explicit_defaults_for_timestamp被禁用,即启用非标准特性。 什么是非标准特性? 标准特性:如果没有显示声明为 NOT NULL,则默认声明为 NULL (除timestamp外的其他数据类型) 非标准特性:如果没有显示声明为 NULL,则默认声明为 NOT NULL(times
MySQL轻松学
2018/03/09
1.5K0
explicit_defaults_for_timestamp参数导致复制中断
[WP Code Highlight.js] Project
https://github.com/owt5008137/WP-Code-Highlight.js
owent
2018/08/01
8000
VS Code 为什么能这么牛?
Visual Studio Code(VS Code)近年来获得了爆炸式增长,成为广大开发者工具库中的必备神器。它作为一个开源项目,也吸引了无数第三方开发者和终端用户,成为顶尖开源项目之一。它在功能上做到了够用,体验上做到了好用,更在拥有海量插件的情况下做到了简洁流畅,实属难能可贵。
GitHubDaily
2019/10/14
1.7K0
如何使用flask的 @app.url_defaults 装饰器
@app.url_defaults 装饰器是 Flask 中的一个装饰器,用来注册一个 URL 变量默认值函数。这个函数会在每次构造 URL 时执行,在请求处理函数之前执行,它的主要作用是为 URL 变量提供默认值。
测试开发囤货
2023/03/14
7770
如何使用flask的 @app.url_defaults 装饰器
vs2019:devExpress设置blazor工程
https://docs.devexpress.com/Blazor/401986/getting-started/install-components-and-create-an-application/without-devexpress-installer/microsoft-templates#2-obtain-your-devexpress-nuget-feed
周星星9527
2021/02/03
1K0
vs2019:devExpress设置blazor工程
点击加载更多

相似问题

Thorntail: project_defaults.yml上的动态值

29

ORDS defaults.xml vs conf/<name>..xml文件上载<entry defaults.xml

13

我到底应该把project-defaults.yml放在哪里?

117

M Project vs Sproutcore

12

如何使用project-defaults yaml配置消息传递activemq thorntail或swarm

131
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文