我正在尝试基于我的“打包袋”为桌面模拟器社区制作一个新工具。 Packup Bag是一种工具,可以记住您放置在其中的物体的世界位置和旋转,因此您可以将它们放回到“打开包装袋”时所处的相同位置和旋转。
我一直试图修改这个,所以它把东西放在相对位置和旋转到袋子,而不是使用硬编码的世界坐标。这里的想法是玩家可以坐在桌子的任何位置,挑选他们想要玩的派系袋。将它放在标记为他们的已知位置并按下该位置,它将填充袋子相对于其位置的内容。
现在我已经解决了一些问题...我能够在某些方面得到相关的包......但我发现它超出了我的数学技能来计算变换的修改。
基本上我有这部分工作..
但是... mod剂量不能同时理解相对位置和旋转....我需要一些修改相对于旋转数据的位置数据......但是不能弄清楚如何。
看到这个视频.... https://screencast-o-matic.com/watch/cFiOeYFsyi
正如你所看到的那样,当我移动物品时,物体相对于它被放置....但是如果我旋转袋子,物体具有正确的旋转但我需要数学计算出它旋转时的正确位置。你可以看到它只是放置在相同的位置,好像没有旋转......因为我还没有弄清楚如何编写代码来做到这一点。
现在我听说过一种叫做“矩阵数学”的东西,但我无法理解。在我开始修改TTS后仅几个月,我就是一名自学成才的程序员。
你可以理解我的意思,我希望..在视频示例中,当我旋转行李时,物体应该放置正确的旋转,但世界位置需要改变。
请参阅此示例以查看相对旋转.... https://screencast-o-matic.com/watch/cFiOeZFsyq
我的代码通过记住包的self.getPostion()和被打包的对象的obj.Position()来计算它。然后它给一个self-obj并存储该值为X和Y位置。它还会记住它是否为负数或位置,然后在放置它时使用self.postion()并添加或减去调整值。旋转相同。
我仍然不知道从这里发生了什么......我有点害怕我的脑袋,并且想到也许你们中的一些数学家可能对如何做到这一点有了更好的想法。
:TL; DR:
所以我有
这些回归(x,y,z}
如果我旋转行李,我可以使用什么数学来找到物体相对于行李的相对位置和旋转。物体以相对的方式出来......
最好在LUA ..谢谢!
我希望你现在已经找到了答案,但是对于找到这个页面的其他人:
问题比你建议的要简单得多 - 它是基本的直角三角形三角学。
请参阅this diagram。你有一个带有点A,B和C的直角三角形,其中C是直角。 (为简洁起见,我将使用缩写opp,adj和hyp。)包在A点,你想要在B点的物体。你有角度和距离(角度A和分别为长度) ,但是你需要B点相对于A点的x,y坐标。
x coord是adj的长度,y coord是opp的长度。如图所示,计算这些的公式是:
cos(angle A) = adj/hyp
sin(angle A) = opp/hyp
解决未知问题:
adj = hyp * cos(angle A)
opp = hyp * sin(angle A)
为了您的具体用途,并考虑到坐标系x,y,z => x,z,y的偏移:
obj_x_offset = distance * math.cos(bag.getRotation().y)
obj_z_offset = distance * math.sin(bag.getRotation().y)
obj_x_position = bag.getPosition().x + obj_x_offset
obj_z_position = bag.getPosition().z + obj_z_offset