【发布时间】:2014-06-09 03:05:05
【问题描述】:
我的问题基本上是在以下情况下计算第二个元素的x和y坐标。
是unity3d中的一个工具,使用c#
【问题讨论】:
-
看起来像定期轮换 - 究竟是什么问题?你不知道角度?或者你不知道旋转后如何计算坐标?还是别的什么?
-
是的,旋转后如何计算坐标?
标签: c# unity3d coordinates
我的问题基本上是在以下情况下计算第二个元素的x和y坐标。
是unity3d中的一个工具,使用c#
【问题讨论】:
标签: c# unity3d coordinates
如果你知道 x 轴和这个盒子形状的对象之间的角度,你可以使用一些基本的三角函数。
让我们假设盒子形状的对象的长度为“len”。 (这真的有助于更好地标记正在发生的事情,我不完全理解。)假设你有一个 θ 角。
我假设圆的中心有坐标 (0,0)。
那么从圆心到盒子接触的圆边缘的垂直距离是y = len * sin(θ),水平距离是len * cos(θ)。
如果你只向上走大约 2/5,你会使用 len / 5 而不是 len。
这只是它背后的数学原理。在 c# 中,您想使用 Math 类。它具有您需要的所有功能。小心弧度和度数。
【讨论】:
所以我猜你有 A 和 B 的坐标。找到第二条线的角度:
float angle = atan2(B.y-A.y, B.x-A.x)
这仅适用于您的情况与图表中的轴对齐(即,如果原始配置沿 x 轴排列)。如果没有,您可以求解公式 |U x V| = |U| |V| sin(angle) 为 angle(您需要一个 arcsin - sin 的倒数),其中 U 和 V 是新旧 AB 向量。
然后围绕A 旋转您的兴趣点(称为P)。为此,您首先从P 中减去A 的坐标,因此旋转轴位于原点。然后通过乘以旋转矩阵来旋转P:
[ cos(angle) -sin(angle) ] [ P.x ]
[ sin(angle) cos(angle) ] [ P.y ]
这给了
x = cos(angle) * P.x - sin(angle) * P.y
y = sin(angle) * P.x + cos(angle) * P.y
获得这些后,将A 的坐标重新添加进去。
总结:
P_new = A + rotate(P_old - A)
实际代码会比这更复杂,但这是抽象图。我会把代码留给你。
【讨论】: