Math 绕圆旋转一点

Math 绕圆旋转一点,math,lua,trigonometry,Math,Lua,Trigonometry,我试图为一个“游戏”制作一个“旋转小地图”,我有两组坐标,一组是玩家,另一组是目标,还有玩家相对于平面的方向。 它们位于一个二维平面上,每个平面都有各自的坐标(例如a(56.25,23.44),B(50.17,33.57)) 所以,我想基本上把一个静态的“迷你地图”变成一个旋转的,希望玩家(a)是中心,一个锚,B会根据玩家面对的方向旋转 在数学上,这意味着我想把点B绕着一个圆心是点a的圆旋转一个角度 (我决不是这两个领域的专家,甚至不是这两个领域的专家,我已经自学了我所知道的一切,所以对我的定义

我试图为一个“游戏”制作一个“旋转小地图”,我有两组坐标,一组是玩家,另一组是目标,还有玩家相对于平面的方向。 它们位于一个二维平面上,每个平面都有各自的坐标(例如a(56.25,23.44),B(50.17,33.57))

所以,我想基本上把一个静态的“迷你地图”变成一个旋转的,希望玩家(a)是中心,一个锚,B会根据玩家面对的方向旋转

在数学上,这意味着我想把点B绕着一个圆心是点a的圆旋转一个角度 (我决不是这两个领域的专家,甚至不是这两个领域的专家,我已经自学了我所知道的一切,所以对我的定义和术语持怀疑态度)

);其中A是玩家或原点,B是要移动的目标或点,B'是要移动到的点。穿过B'的线将是玩家在给定角度α下面对的方向

这一点已经在这些论坛中被问到,我想已经解决了,我已经看到了这些,我不完全理解它们,也没有解决我的问题

也就是说,一些帖子说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
本地playerA=45
局部X,Y=fX-pX,fY-pY
局部hyp=math.sqrt((X^2)+(Y^2))
局部X2,Y2=hyp*math.cos(playerA),hyp*math.sin(playerA)
打印(X2、Y2、hyp)
(如果玩家的坐标是pX和pY,目标的fX和fY,半径或斜边的hyp和角度playerA)并且仅仅用预期的角度绘制出结果坐标,事情似乎大部分是错的

希望我能很好地解释这个问题和我迄今为止的工作,感谢您阅读并思考

编辑:我已通过将目标的一对坐标转换为极坐标,添加一个我希望它移动的角度并转换回笛卡尔坐标,解决了我的问题,这看起来很有希望,但上面的问题仍然困扰着我;对于任何好奇或寻找类似答案的人,此“解决方案”的测试如下:

局部x,y=20,20
局部hyp=math.sqrt((x^2)+(y^2))
局部a=数学atan(y/x)
印刷(hyp,数学学位(a))
a=a+math.rad(135)
局部x2=hyp*math.cos(a)
本地y2=hyp*math.sin(a)
打印(“.x2..”、“.y2..”)
局部hyp=math.sqrt((x2^2)+(y2^2))
局部a=数学atan(y2/x2)
印刷(hyp,数学学位(a))

您的代码基本上是正确的,但需要进行一些更正:lua trig。函数使用弧度参数,因此必须将45度转换为弧度(我给出了两种方法)。你计算的位置是相对于玩家的,所以对于绝对坐标,你必须加上玩家的位置:

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

local playerA = 45 * math.Pi / 180
  or
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)

这已经做过了,也许我忘了提一下,在度数和弧度方面都做过尝试,但都没有给出可靠的结果;如果他们只是相对于玩家而言,这难道不应该更简单吗?让游戏者在0,0,它们在什么位置,等于Lua中X的平方,而不是二进制异或?为函数提供简单数据并检查每个字符串的结果。例如,X=6,Y=8,angle=45应该给出hyp 10和最终坐标7.071,正如你所说的,它返回
5.253219881773 8.5090352453412 10
,如(5.25,8.5)中所示,hyp 10看起来不像它应该的样子,还尝试了(10,10)和90的角度,返回的
-6.3367178487143 12.643022063802 14.142135623731
;另外,我使用了X*X而不是X^2(结果是一样的),只是为了确保原因很简单-您使用的是45弧度而不是度(cos(45弧度)=0.52532198881773))。你完全正确,我已经做了一些测试和绘图,我不知道为什么它能工作,但是它似乎不能给出正确的或想要的结果,对于大于90度或小于0度的情况(这是不可能的)