繁体   English   中英

如何从x和y轴找到圆角

[英]How can I find a circle angle from x and y axis

随时将我的问题标记为重复。 因为我对COS,SIN和TAN绝对一无所知,其他人可能已经问过这个问题。

因此,我尝试根据可从游戏手柄输入获得的x和y轴设置圆形进度条。 简单地说,进度条仅为最小值0和最大值360。

我确实尝试了一下搜索,但是我最好的理解是它只能在180度且x和y为正值时工作。 但是我从控制器获得的输入是y,并且y从-1到1(其中x -1左,1右,y -1是下,1是上)

到目前为止,这是我的代码。

var controller = Windows.Gaming.Input.Gamepad.Gamepads[0].GetCurrentReading();
x = controller.LeftThumbstickX
y = controller.LeftThumbstickY
//what do I have to do from here?
progress.Value = angle; //?

三角函数atan2是完成此工作的工具。 在C#中,这由Math.Atan2实现:

double angleInRadians = Math.Atan2(y, x);
double angleInDegrees = (180 / Math.PI) * angleInRadians;

将此公式与(例如)参数(1,1) ,您将得到45的结果。

但是,就极坐标而言,此角度是从“东”开始逆时针方向测量的。 要将其转换为从“北”顺时针测量的角度:

double compassRadians = Math.PI / 2 - angleInRadians;
double compassDegrees = (180 / Math.PI) * compassRadians;

但是现在我们可能会遇到负值,因此我们可以使用以下方法对其进行规范化:

double normalizeDegrees(double a) => ((a % 360) + 360) % 360; //convert to 0-360

然后

var compassAngle = normalizeDegrees(compassDegrees);

您想要的方法是Math.Atan2 这需要两个参数-首先是y值,然后是x值-它为您提供了一个以弧度为单位的角度。

由于您想要一个以度为单位的角度,因此需要进行转换-转换因子为180 / Math.PI 因此,您将使用类似:

var radiansToDegrees = 180 / Math.PI;
progress.Value = Math.Atan2(y,x) * radiansToDegrees;

根据x和y的确切组合需要对应于0,之后可能需要添加多个度数。 照原样,x = 1,y = 0时为0度,x = 0,y = 1时为90度,依此类推。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM