我正在尝试编写一个应用程序内操纵杆轴校准工具。

游戏杆轴区域应为矩形,但实际上,它是非线性闭合曲线,我想提高精度。

校准应以这种方式工作:
我们有一个测量值,这样我们就可以得到正确的值:

Correct value = [(measured value)/range] * wantedrange


其中,范围是该轴测得的最大值和最小值之差。
但是还有一个偏移量可以将中心点移到正确的位置,如何计算?

编辑:我也做了一个图像:绿色矩形是预期的区域,红色的形状是“真实”不准确的测量的区域,最后蓝色是我想要移动到(0,0)的想要的校准区域,以便我可以使用比率将坐标转换为更大的绿色矩形。



编辑2:
该图说明了zapl的答案,如何使校准更加准确:
如果找到蓝色矩形中心,则可以将矩形分为4个矩形,并计算该范围与绿色矩形范围之间的比率。
代码应该是这样的:

if(value<axiscenter) correctedvalue = ((value-axismin)/(axiscenter-axismin)) * wantedaxisrange;
else correctedvalue = wantedaxisrange + ((value-offset-axiscenter)/(axismax-axiscenter-axismin)) * wantedaxisrange;

最佳答案

您可以通过指示用户沿着边缘移动操纵杆,使所看到的值为红色曲线,从而获得蓝色矩形的位置。您还应该指示用户将操纵杆留在居中位置,因为您通常需要知道中心位置。计算中心并不总是真正的中心位置。

对于每个轴,将这些值在中心的边分开,并找到最接近中心点的那些值。这将与计算的中心一起工作。现在您有了蓝色矩形。

例如。在X轴上,您看到的值范围是0-20和80-100,中心是〜50>蓝色矩形是20-80。

假设您要对其进行校准,以使其值为0-100(绿色),则将x轴的校正计算为

calibratedX = (uncalibrated - 20) * 100 / 60


值向右移动20(-20将其标准化为0-60),它们的范围是60(80-20),您想将其放大到0-100。在此之后,将剪辑值设置为0-100,因为它们将位于蓝色矩形外部的红线上的每个点的外部。

结果看起来像

其中粉红色是转换后的值,绿色矩形外部的粉红色区域被切掉。

关于中心点:也可以通过这些计算来运行它。

10-08 09:11
查看更多