将xinput坐标转换为正方形

时间:2014-08-24 18:22:48

标签: c# math coordinates xinput

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

我读取坐标并对值进行标准化没有问题,因此我在X和Y方向上得到一个介于-1和+1之间的浮点数。 我的问题是,棒本身在物理上限于一个圆圈,在我的情况下,我想"伸展"坐标因此它变得更像一个正方形而不是圆形。

原因是每个方向都在控制电机,如果我移动杆例如在右上方,我希望X和Y都变为1。 由于棒是圆形的,这是不可能的,这也使得两个电机都无法全速运转。

任何建议?

1 个答案:

答案 0 :(得分:1)

因此,您希望半径为r的圆上的点映射到半径为r的正方形上的点,该点位于相同的光线上。朝着这个目标,你必须使用通常的公式计算半径

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

然后从比例因子

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

最后将x替换为f * x,y替换为f * y。

可以通过注意因子是

来改变这种计算
f = sqrt ( 1 + (x*x)/(y*y) )

如果abs(y) > abs(x)

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

在相反的情况下。或者通过注意到最大坐标被r替换而且相应地缩小了更小的坐标,这也不会减少物流。