【问题标题】:Calculating coordinates in circle计算圆坐标
【发布时间】:2014-06-09 03:05:05
【问题描述】:

我的问题基本上是在以下情况下计算第二个元素的x和y坐标。

是unity3d中的一个工具,使用c#

【问题讨论】:

  • 看起来像定期轮换 - 究竟是什么问题?你不知道角度?或者你不知道旋转后如何计算坐标?还是别的什么?
  • 是的,旋转后如何计算坐标?

标签: c# unity3d coordinates


【解决方案1】:

如果你知道 x 轴和这个盒子形状的对象之间的角度,你可以使用一些基本的三角函数。

让我们假设盒子形状的对象的长度为“len”。 (这真的有助于更好地标记正在发生的事情,我不完全理解。)假设你有一个 θ 角。

我假设圆的中心有坐标 (0,0)。

那么从圆心到盒子接触的圆边缘的垂直距离是y = len * sin(θ),水平距离是len * cos(θ)。

如果你只向上走大约 2/5,你会使用 len / 5 而不是 len。

这只是它背后的数学原理。在 c# 中,您想使用 Math 类。它具有您需要的所有功能。小心弧度和度数。

【讨论】:

  • 非常感谢您的回复,但我已经更新了图片。我们现在有位置 A 和 B。
【解决方案2】:

所以我猜你有 A 和 B 的坐标。找到第二条线的角度:

float angle = atan2(B.y-A.y, B.x-A.x)

这仅适用于您的情况与图表中的轴对齐(即,如果原始配置沿 x 轴排列)。如果没有,您可以求解公式 |U x V| = |U| |V| sin(angle)angle(您需要一个 arcsin - sin 的倒数),其中 UV 是新旧 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)

实际代码会比这更复杂,但这是抽象图。我会把代码留给你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    相关资源
    最近更新 更多