求两个全等三角形之间的旋转
Finding rotation between two congruent triangles
我正在开发一个3D网格解析工具。目前,我正在尝试确定3D空间中两个全等三角形之间的旋转—我们将它们称为CCD_ 1和CCD_。
我能够将点A
和D
平移到同一位置,现在需要确定一个旋转,将DEF
放置在与ABC
相同的平面上,方向相同,但我对数学不够熟悉。有人能告诉我如何解决这个问题吗?
我一直在考虑用AB
和DE
的叉积来确定旋转轴,然后用点积来求一个角度,然后用它们做一个四元数;但我不知道这是否总能使它们正确对齐。
我是不是搞错了上面的想法?它会一直对齐三角形吗?如果不会,还有什么替代方法可以找到轮换?
你的右手,你的第一个部分将AB旋转到DE上(或其他方式)。但这只对齐一条边。要对齐其他两个,仍然需要将C旋转到F上(在第一次旋转之后)。必要的角度和轴可以通过使用您提出的方法将三角形的两个面法线相互旋转来计算(根据您的问题,我想您知道如何计算三角形的面法线)。
编辑:所以按顺序执行以下步骤:
- 将A转换为D
- 将AB旋转到DE
- 通过将三角形的面法线彼此旋转,将C旋转到F上
您必须获取已经部分变换的三角形的面法线(在步骤2之后),但它们可能与原始三角形相同(不确定)。然后,您可以将这些转换连接为一个。
- 平移ABC,使ABC在A处的曲面法线与基准处的点D重合
- 旋转ABC,使位于A的曲面法线与位于D的曲面法线重合。这是唯一棘手的部分。幸运的是,这是一件非常常见的事情。它与旋转3D相机的方向相同。谷歌找到了这个参考
- 现在以A为原点旋转三角形ABC,使B和C与D和E重合。这是一个标准的2D旋转矩阵
相关文章:
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- std::atomic和std::condition_variable wait,notify_*方法之间的区别
- 大小相等但成员数量不同的结构之间的性能差异
- 类与私有变量的其他类之间的线程安全性
- 如何在cpp文件之间切换窗口?在Qt中
- 绘制旋转的三角形
- 线程之间的布尔停止信号
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 使用指针计算三角形各点之间的距离
- 三角形之间的相似性;双变量是一个痛苦
- 如何在C 上的给定三角形之间找到最大面积
- 在三维中查找点到三角形之间的距离
- 点和三角形之间的链接
- 求两个全等三角形之间的旋转