1

我正在开发一个使用 xinput 读取 xbox 360 拇指棒的小型 c# 程序。

我在读取坐标和标准化值方面没有问题,所以对于 X 和 Y 方向,我得到了一个介于 -1 和 +1 之间的浮点数。我遇到的问题是棍子本身在物理上仅限于一个圆圈,在我的情况下,我想“拉伸”坐标,使其更像是一个正方形而不是一个圆圈。

原因是每个方向都在控制一个电机,如果我移动操纵杆,例如右上角,我希望 X 和 Y 都变为 1。由于操纵杆是圆形的,这是不可能的,这也使得不可能同时制造两个马达全速运行。

有什么建议吗?

4

1 回答 1

1

因此,您希望将半径为 r 的圆上的点映射到通过原点的同一射线上半径为 r 的正方形上的点。为了实现这个目标,您必须使用通常的公式计算半径

r = sqrt(x*x+y*y)

然后从那个比例因子

f = r / max ( abs(x), abs(y) )

最后用 f*x 替换 x,用 f*y 替换 y。

人们可以通过注意到因子是

f = sqrt ( 1 + (x*x)/(y*y) )

如果abs(y) > abs(x)

f = sqrt ( 1 + (y*y)/(x*x) )

在相反的情况下。或者注意到最大的坐标被 r 替换并且较小的坐标相应地缩放,这也不会减少多少物流。

于 2014-08-24T18:57:14.493 回答