我正在尝试为“游戏”制作某种“旋转小地图”,我为两个玩家设置了两组坐标,一个坐标是玩家,另一个坐标是目标,还有方向玩家面对飞机。 它们位于二维平面中,每个平面都有其坐标(例如A(56.25,23.44),B(50.17,33.57))。
因此,我希望通过以玩家(A)为中心,将静态的“小地图”基本上变成旋转的小地图,B将根据玩家所面对的方向围绕其旋转
用数学(?)术语,这意味着我想将点B绕一个以点A为中心的圆旋转 (我绝不是这两个领域的专家,甚至也不擅长,我已经学会了自己所知道的一切,因此请一言以蔽之。)
Kind of a basic idea;其中A是玩家或原点,B是要移动的目标或点,B'是将要移动的点。穿过B'的线将是玩家以给定角度alpha面对的方向
在这些论坛上已经问到了这一点,我想解决了,我已经看到了这些,但我并不完全理解它们,也无法解决我的问题< / p>
也就是说,有些帖子说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和角度玩家A)然后只绘制带有预期角度的结果坐标,一切似乎就消失了
希望我到目前为止已经很好地解释了这个问题和我的工作,感谢您到目前为止阅读并给出了想法!
编辑:我已经解决了我的问题,方法是将目标的一对坐标转换为极坐标,添加一个我希望其移动的角度并转换回笛卡尔坐标,目前看来,这很有希望,但仍然上面的问题困扰着我;对于任何好奇或正在寻找相似答案的人,此“解决方案”均经过如下测试:
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.rad(135)
local 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))
答案 0 :(得分:1)
您的代码大部分是正确的,但需要进行一些更正: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)