2

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

摇杆轴区域应该是一个矩形,但实际上它是一个非线性闭合曲线,我想提高精度。

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

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

其中范围是为该轴测量的最大值和最小值之间的差。但是也有一个偏移量把中心点移动到正确的位置,怎么计算呢?

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

在此处输入图像描述

EDIT2: 这张图片解释了校准如何更加准确,这要归功于 zapl 答案:如果我们找到蓝色矩形中心,我们可以将矩形分成 4 个矩形并计算该范围与绿色矩形范围之间的比率。代码应该是这样的:

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

在此处输入图像描述

4

1 回答 1

1

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

对于每个轴,将这些值分隔在它们​​所在的中心一侧,并找到最接近中心点的值。这将适用于计算中心。现在你有了蓝色矩形。

例如,在 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,因为它们将在蓝色矩形之外的红线上的每个点之外。

结果看起来像这

其中粉色为变换后的值,绿色矩形外的粉色区域被切除。

关于中心点:也只需通过这些计算即可。

于 2013-08-04T21:07:13.957 回答