Javascript 一组对象的几何旋转

Javascript 一组对象的几何旋转,javascript,geometry,Javascript,Geometry,参考第一张图,我试图复制这三个对象,从任意角度观察它们(A1)。我所在的位置和第一个物体之间的距离并不重要,只是物体之间的相对位置 在第二张图中,我选择一个点来复制这些对象,面向另一个任意角度(B1)。 角度(C1)表示-90度的近似位置 如果A1=0,90180270,甚至45135等等,我可以让它工作,但是我得到的方程只适用于0和180,或者90和270。我必须通过更改硬编码的偏移角度并在偏移前放置/移除负号来修改它们,以在这些方向上工作 我正在做的是javascript(和它的Minecr

参考第一张图,我试图复制这三个对象,从任意角度观察它们(A1)。我所在的位置和第一个物体之间的距离并不重要,只是物体之间的相对位置

在第二张图中,我选择一个点来复制这些对象,面向另一个任意角度(B1)。 角度(C1)表示-90度的近似位置

如果A1=0,90180270,甚至45135等等,我可以让它工作,但是我得到的方程只适用于0和180,或者90和270。我必须通过更改硬编码的偏移角度并在偏移前放置/移除负号来修改它们,以在这些方向上工作

我正在做的是javascript(和它的Minecraft),通常我能弄明白,但我已经做了几个星期了

下面是一些在某些直角方向上工作的伪代码。我已经更新了这一点,使其更加准确,1x和2x是块x坐标,等等-一切都是相对于(1)块的。 雷击机的坐标系和正常的有点不同-0是南部,+90是西部,180是北部,270是东部。 唯一的区别是我正在制作负az,ax。

// works for north/south looking - A1 is either 180/0 , B1 can be anything
var x = 1x - 2x;
var z = 1z - 2z;
var direction = Math.atan2(z1, x1);
var L1 = Math.sqrt(Math.pow(x1, 2) + Math.pow(z1, 2));
var az = Math.round(L1 * Math.sin((B1 + A1 + (direction * 180 / Math.PI)) * Math.PI / 180));
var ax = Math.round(L1 * Math.cos((B1 + A1 + (direction * 180 / Math.PI)) * Math.PI / 180));

// works for east/west looking - A1 is either 90/270 , B1 can be anything
var x = 1x - 2x;
var z = 1z - 2z;
var direction = Math.atan2(z1, x1);
var L1 = Math.sqrt(Math.pow(x1, 2) + Math.pow(z1, 2));
var az = -Math.round(L1 * Math.sin((B1 + A1 + (direction * 180 / Math.PI)) * Math.PI / 180));
var ax = -Math.round(L1 * Math.cos((B1 + A1 + (direction * 180 / Math.PI)) * Math.PI / 180));


这是我在数学堆栈交换中得到的正确答案。谢谢,这是我在数学堆栈交换中得到的正确答案。谢谢