使用两点之间的距离来确定相对位置

我有一对固定的位置传感器(红外线),将信号从反射器反射到固定接收器(所有3个设备都位于单个PCB上,[发射器,接收器,发射器])。 这个设备的API给我的数据是从每个传感器到反射器的范围(手,桌子,任何东西)。

我的问题是:使用上面的数据,我怎样才能确定反射器的相对X位置。 我相当肯定这是一个微不足道的问题,但我的大脑正在画空白。

每个传感器的数据范围从0到240。

var pos = 120 + (ranges.left - ranges.right);
pos = 100/240 * pos;
pos = Math.round(pos);

这是我最初的尝试,这个想法让我在0到100之间找到了一个x位置。这类作品以一种跳跃式的方式 - 但我想要一个更加精致的方法。

虽然这里有很多关于找到已知点之间距离的问题,但我还没有发现一个正好相反的问题(这是我想要做的)。

编辑:

两个黑圈是发射器,光圈是接收器。 正方形是反射器。 该线是X轴,我想知道沿着该线的方形的位置。 但是请注意,在任何给定的点上,该线可能离传感器更近或更远。


我认为这通过查看三角形来实现...

使用图... 在这里输入图像描述

S是两个发射机的距离,R是目标的距离,A,B是设备测量的距离,'x'是我们试图找到的距离。

毕达哥拉斯:(这里A ^ 2表示A平方)

A^2 = R^2 + x^2       or   A^2 - x^2 =     R^2

B^2 = R^2 + (S+x)^2   or   B^2 - (S+x)^2 = R^2

重新排列这个

     A^2 - x^2 = B^2 - (S+x)^2
     A^2 - x^2 = B^2 - S^2 - 2Sx - x^2      expand (S+x)^2
     A^2       = B^2 - S^2 - 2Sx            lose x^2 from both sides
A^2 - B^2 +S^2 = -2Sx                        rearrange

最后:

   A^2 - B^2 + S^2
   _______________  =  x
        -2S

达达!

我在纸上做了一次快速检查,我认为这是正确的。 另一个快速检查是如果A与B相同,在这种情况下,它可以归结为:

  -S^2 / 2S  == -S/2  == 1/2 way between the transmitters, which is right.

编辑:下面的评论...

请注意,最终公式只涉及A,B和S.我们需要S(发射器之间的距离),因为这会完成三角形A / B / S,因此会缩放输出值。 您可以为此使用固定值,但输出不会直接与A或B值的比例相关。 但是,你可以使用s = 100给...

         A^2 - B^2 + 10000
 x =     _________________  
              -200

或者,在javascript中:

var pos= ((ranges.left*ranges.left)-(ranges.right*ranges.right)+10000)/200;

这将给出一个介于0到100之间的值,以使物体直接位于两个传感器之间,例如,如果两个传感器值都是42,我们得到:

pos =(42 * 42-42 * 42 + 10000)/ 200; //答案= 50

如果物体直接位于传感器A的前方,我们可以得到以下值:

pos =(100 * 100-140 * 140 + 10000)/ 200; // answer = 2

或者直接在B面前:

pos =(140 * 140-100 * 100 + 10000)/ 200; // answer = 98

进一步沿着你的'x'轴显然会在一个方向上得到更大的值,并在另一个方向上去。 我希望这更清楚。

链接地址: http://www.djcxy.com/p/84945.html

上一篇: use distance between two points to determine relative location

下一篇: Collision detection of huge number of circles