我正在尝试根据我的“收拾行囊”为桌面模拟器社区开发一种新工具。 Packup Bag是一种工具,可以记住您放置在其中的对象的世界位置和旋转,因此您可以将它们放回“打开包装袋”时的位置和旋转。
我一直在尝试对此进行修改,以使其沿相对位置吐出并相对于袋子旋转,而不是使用硬编码的世界坐标。这里的想法是,玩家可以坐在桌子上的任何位置,选择他们想要玩的派系包。.将其放在标记有他们的已知位置上并按一下该位置,它将相对于其位置填充包中的内容
现在我已经解决了其中的一些问题...我能够以某种方式将书包放到相对位置上..但我发现数学知识超出了我的数学技能,可以对变换进行修改。
基本上我已经开始工作了。
但是.. mod不能同时理解相对位置和旋转...。我需要以某种方式修改相对于旋转数据的位置数据...但无法弄清楚如何。
观看此视频...。 https://screencast-o-matic.com/watch/cFiOeYFsyi
正如您所看到的,当我围绕对象移动袋子时....但是,如果我旋转袋子,则对象具有正确的旋转,但是如果它是正确的,我需要算出正确的位置旋转。您可以看到它只是被放置在与没有旋转一样的位置上,因为我还没有弄清楚如何编写代码来做到这一点。
现在我听说过一种叫做“矩阵数学”的东西,但是我听不懂。在我开始修改TTS仅仅几个月后,我是一个自学成才的程序员。
您可以理解我的希望。在视频示例中,当我旋转书包时,应该以正确的旋转方式放置对象,但是需要更改世界位置。
请参阅此示例以查看相对旋转...。 https://screencast-o-matic.com/watch/cFiOeZFsyq
我的代码通过记起袋子的self.getPostion()和被打包的对象的obj.Position()来确定剂量。然后确定一个自obj并存储X和Y位置的值。它还会记住它是负数还是位置,然后在放置它时使用self.postion()并添加或减去调整值。旋转也是一样。
我仍然不知道接下来会发生什么。.我一直对此感到头疼,并认为也许你们中的一些数学家可能对如何做有更好的主意。
:TL; DR:
我有
这些返回(x,y,z}
我可以使用什么数学方法找到对象相对于袋子的相对位置和旋转,因此如果我旋转袋子。物体以相对方式从中出来...
最好使用LUA。谢谢!
答案 0 :(得分:0)
希望您现在已经找到答案,但对于其他找到此页面的人:
这个问题比您所建议的要简单得多-它是基本的直角三角形。
请参阅this diagram。您有一个带有点A,B和C的直角三角形,其中C是直角。 (为简便起见,我将使用缩写opp,adj和hyp。)袋子位于A点,您想要对象位于B点。您有角度和距离(分别为A角和hyp的长度) ,但您需要B点相对于A点的x,y坐标。
x坐标是adj的长度,y坐标是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