【问题标题】:Recalculation next position (x and y) based on rotate to N degree基于旋转到 N 度重新计算下一个位置(x 和 y)
【发布时间】:2021-05-27 17:20:01
【问题描述】:

我需要计算形状的下一个位置(X 和 Y),但不知道如何计算。我尝试了不同的解决方案,但总是出现问题。也许有人可以帮助我,我需要一个如何计算的提示,为了更好地理解,我将添加屏幕截图。

说明:我在背景中有地图的图像。我在图像上画了形状。之后,我需要将背景旋转 N 度(N 可以从 0 到 360)并重新计算形状 (X, Y) 的新位置

我有的参数:

  • 形状 X 和 Y 的起始位置
  • N 度值
  • 形状的宽度和高度

另外,我还有背景的宽度和高度(如果需要的话)。

  • 起始位置

  • 将背景旋转 90 度

  • 将背景旋转 90 度。手动更改形状 X 和 Y 的位置可能会出错

我需要一些算法来计算形状的新位置,感谢您的帮助。

【问题讨论】:

  • 对象的旋转与背景的旋转相同。你如何旋转它?总是围绕它的中心?
  • @MOehm 是的,背景一直围绕中心旋转,对象的旋转始终等于背景旋转以保存相对于地图图像的位置
  • 所以如果你表达你的对象相对于背景中心的坐标,你就有了旋转,不是吗?
  • @MOehm 我有旋转值,但需要为形状计算新的 X 和 Y。例如,您可以看到形状 X = 350 和 Y = 125(第一个屏幕)的起始位置以及形状 X = 412 和 Y = 200(最后一个屏幕)的预期位置。我想我错过了解释细节,但形状不随背景旋转,我需要计算新位置。同样在第二个屏幕中,您可以看到旋转后发生的 wath。

标签: javascript algorithm geometry rotation image-rotation


【解决方案1】:

所以你已经围绕它的中心 C 旋转了一个角度 θ 的背景。您想对形状的点 P 应用相同的旋转。

P 关于原点的旋转可以通过以下方式实现:

    Px = P x · cos θP y · sin θ
Py = P x · sin θ + P y · cos θ

可以通过将 C 移动到原点,旋转,然后将 C 向后移动来实现围绕点 C 的旋转。所以:

    Px = (P x - C x) · cos θ - (P y - C y) · 罪θ + C x
Py = (P x - C x) · 罪θ + (P y - C y) · cos θ + C y

在 JavaScript 中:

R.x = (P.x - C.x) * Math.cos(a) - (P.y - C.y) * Math.sin(a) + C.x
R.y = (P.x - C.x) * Math.sin(a) + (P.y - C.y) * Math.cos(a) + C.y

其中 a 是以弧度表示的单位。这将顺时针旋转。如果你改变两个 sin 项的符号,旋转将是逆时针的。

您可以对多边形的每个点或形状的中心进行旋转,在这种情况下,您也必须围绕其中心旋转形状。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 2010-12-19
    • 1970-01-01
    • 2020-05-25
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    相关资源
    最近更新 更多