gpt4 book ai didi

c++ - 在依赖的附加对象链上执行旋转变换的最快方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:09:28 24 4
gpt4 key购买 nike

假设我有两个(例如两个,它实际上是一些 n > 1)“相互连接”的矩形棱柱,使得它们相邻面上的 4 个顶点在内存中是相同的顶点。所以就像两个木 block ,一个堆叠在另一个上面,底部有 4 个顶点,中间有 4 个,两者共享,顶部有 4 个。现在,我希望能够首先在“顶部”木 block 上进行特定的旋转,就好像它在一个铰链上一样,该铰链的中心点是这 4 个共享顶点。

就像肘部一样,假设它只能以特定角度弯曲最多 45 度,为了执行旋转,我围绕那个不可见的铰链中心点旋转构成对象的 8 个顶点。在此过程中,另一个 block 的 4 个共享顶点会有所移动,但由于铰链是它们之间的中心点,因此它们不会“平移”离开底部 block 。我想称它们为木制是违反直觉的,因为它们会以特定的方式变形,但我试图将其设置为可视化。无论如何,假设我希望能够以不同的方式旋转这个底部 block ,但让顶部 block 像连接一样。因此,如果底部 block 移动,顶部 block 也会随之摆动,但也会它们之间的铰链上的任何弯曲。

我正在考虑通过轴角或四元数逐步进行转换,从“最顶层”的 block 开始,沿着依赖链向下移动,对当前 block 和它“上方”的 block 上的每个顶点执行旋转.然而,这将需要为该链中的每一步偏移所有顶点以将当前铰链作为原点,执行旋转,然后反转先前的偏移。有没有更有效的方法来处理这个问题?我的意思是速度效率,在内存中有额外的预处理数据并不是什么大问题。也可能有一段时间我不能指望拥有这样的线性依赖链(例如顶部 block 最终连接到底部 block 以形成一个环,也许)。对于这些可能性,处理此问题的正确方法是什么?

最佳答案

根据你的描述,我觉得你基本上想要的东西就像一 block 长长的“果冻”,即,如果 block /棱镜的顶部移动,那么在其余部分中会有一些二次移动 block /棱镜链,有点像移动链条或某些软体将如何在构成链条或环的其余部分中产生二次运动。

如果是这种情况,那么我建议实际构建一些“骨骼”,其中每个骨骼段开始和结束于构成棱镜每个开始和结束面的 4 个顶点的中心点/ block 。然后您可以计算当您移动骨骼链的一段时,链中的其他骨骼相对于被移动的骨骼应该移动多少。从那里,您可以将棱柱/ block 中的其余顶点加权到这个中央“骨骼”,以便它们随着骨骼移动而移动适当的量。您可能还希望将连接到一个“骨骼”的顶点与另一个骨骼段进行平均,以便连接顶点的权重下降,如果您最终在每个顶点上捏得太多,则可以创建更平滑的运动“union ”。

使用顶点相对于骨骼称重的骨骼应该可以减少您需要计算的旋转变换的数量。只有骨骼关节的运动需要繁重的计算……顶点本身只是根据链中骨骼的位置进行插值。

关于c++ - 在依赖的附加对象链上执行旋转变换的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com