围绕圆周旋转一个点

我正在试图为一个“游戏”制作一种类似于“旋转小地图”的东西,我有两个玩家的坐标,一个是玩家,一个是目标,以及玩家相对于平面所面朝的方向。 它们位于一个二维平面上,每个都有它们的坐标(例如A(56.25,23.44),B(50.17,33.57))。

所以,我想要将一个静态的“小地图”变成一个旋转的地图,希望玩家(A)成为中心,成为B围绕其旋转的锚点,其旋转方向取决于玩家所面朝的方向。

以数学(?)术语来说,这意味着我想将点B绕点A旋转一个角度形成一个圆。 (我绝不是专家,甚至不精通这两个领域,我学到的一切都是自学的,因此请带着怀疑的心态接受我的定义和术语)

基本想法; A是玩家或起点,B是目标或要移动的点,B'是它将要移动到的点。穿过B'的线将是给定角度alpha时玩家面对的方向。

已经在这些论坛上讨论过这个问题了,而且我猜已经解决了,我看到了这些问题,但我并没有完全理解它们,也没有解决我的问题。

有些帖子说B'(X,Y)的公式应该是X = hyp * cos(a)(其中a是角度,hyp是斜边),Y = hyp * sin(a),但由于_未知的_原因,这使我的B'变得疯狂,并且如果A和B在同一轴上,则不适用(我不理解它是如何工作的,也不知道为什么它不工作)。

另一个帖子说公式应该是X = Ax * cos(a) - Ay * sin(a)Y = Ay * cos(a) - Ax * sin(a);不幸的是,这也不起作用,因此最终我不明白为什么或如何这两个都起作用,以及为什么它们都不起作用,角度已经以度和弧度的形式给出。

这是我用于测试(在实现想法之前)的代码:

local pX,pY,fX,fY = 10,20,10,40
local playerA = 45
local X,Y = fX-pX,fY-pY
local hyp = math.sqrt((X^2)+(Y^2))
local X2,Y2 = hyp * math.cos(playerA),hyp * math.sin(playerA)
print(X2,Y2,hyp)

(其中玩家的坐标将是pX和pY,目标的fX和fY,半径或斜边hyp和角度playerA)。只需使用预期角度绘制结果坐标,结果大多数情况下都不正确。

希望我已经充分解释了问题和我的工作,谢谢你们至此阅读并考虑这个问题!

编辑:我通过将目标的坐标对极坐标进行转换,添加我想要移动的角度,然后再转换成直角坐标已经解决了问题,现在看来好像是很有前途的,但上面的问题仍然令我感到不安;对于有兴趣或寻找类似答案的人,这个“解决方案”是这样测试的:

local x,y = 20,20
local hyp = math.sqrt((x^2)+(y^2))
local a = math.atan(y / x)
print(hyp,math.deg(a))
a = a + math.rad135local x2 = hyp * math.cos(a)
local y2 = hyp * math.sin(a)
print"("..x2..","..y2..")"local hyp = math.sqrt((x2^2)+(y2^2))
local a = math.atan(y2 / x2)
print(hyp,math.deg(a))
点赞
用户844416
用户844416

你的代码大部分正确,但是需要进行一些校正:lua中的三角函数使用的是弧度作为参数,所以你需要将45度转换为弧度(我提供了两种方式)。而且你计算出的位置是相对于玩家的,所以为了得到绝对坐标,你需要加上玩家的坐标:

local pX, pY, fX, fY = 10, 20, 10, 40

local playerA = 45 * math.Pi / 180
  或者
local playerA  = math.rad(45)

local X, Y = fX - pX, fY - pY
local hyp = math.sqrt((X ^ 2) + (Y ^ 2))

local X2, Y2 = pX + hyp * math.cos(playerA), pY + hyp * math.sin(playerA)

print(X2, Y2, hyp)
2019-06-27 03:48:22