首页 > 解决方案 > 一组对象的几何旋转

问题描述

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

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

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

我正在做的是 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));

第一张图

在此处输入图像描述

第二张图

在此处输入图像描述

标签: javascriptgeometry

解决方案


推荐阅读