一组对象的几何旋转

时间:2020-05-30 21:18:25

标签: javascript geometry

参考第一个图,我试图复制三个对象,并从任意角度(A1)看它们。我与第一个对象之间的距离并不仅仅取决于对象彼此之间的相对位置。

在第二张图中,我选择一个要复制这些对象的点,它面对另一个任意角度(B1)。 角度(C1)显示大约-90度的位置。

如果A1 = 0,90,180,270甚至45,135等,我可以使它工作,但我得出的方程式仅适用于0和180或90和270。我必须通过更改a来修改它们以在这些方向上工作硬编码的偏移角度,并在偏移之前放置/删除负号。

我正在做的是javascript(及其Minecraft),通常我能弄清楚,但是我已经研究了好几个星期。

以下是一些伪代码,它在某些直角方向上有时起作用。我将其更新为更准确,1x和2x是块x坐标等。-一切都是相对于(1)块的。 Minecraft的座标系统与正常情况有所不同-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));

HostListener

enter image description here

First diagram

enter image description here

0 个答案:

没有答案