向量 - > 2D空间中从矢量到点的垂直距离

时间:2012-07-15 16:18:31

标签: objective-c vector distance point

enter image description here

我有一个沿向量移动的精灵(-0.7,-0.3)。我有另一个点我的坐标 - 让我们称之为(xB | yB)。现在,很久以前我学会了计算从矢量到点的垂直距离(本页的第一个公式http://en.wikipedia.org/wiki/Perpendicular_distance)。但是我尝试了它,如果我记录它,它会返回一个令人难以置信的高值100%错误。那我该怎么办?看看我提供的图像。

incomingVector =( - 0.7,-0.3) //这是精灵正在移动的向量

bh.position 是我想要计算到

的距离的点

以下是代码:

        // first I am working out the c Value in the formula in the link given above
        CGPoint pointFromVector = CGPointMake(bh.incomingVector.x*theSprite.position.x,bh.incomingVector.y*theSprite.position.y);
        float result = pointFromVector.x + pointFromVector.y;
        float result2 = (-1)*result;

        //now I use the formula
        float test = (bh.incomingVector.x * bh.position.x + bh.incomingVector.y * bh.position.y + result2)/sqrt(pow(bh.incomingVector.x, 2)+pow(bh.incomingVector.y, 2));

        //the distance has to be positive, so I do the following
        if(test < 0){
            test *= (-1);
        }

1 个答案:

答案 0 :(得分:2)

让我们根据原始link的内容再次实施公式。

  • 我们为该行设置了向量 V(a; b)
  • 我们在线上有一个(精灵的中心): P(x1,y1)
  • 我们在其他地方另一点 B(xB,yB)

这里的测试是两行随机值:

  1. a = -0.7; b = -0.3; x1 = 7; y1 = 7; xB = 5; yB = 5;
  2. a = -0.7; b = -0.3; x1 = 7; y1 = 7; xB = 5.5; yB = 4;
  3. 分子如下:(看来你是以一种未知的方式计算分子,我不明白为什么你这样做,因为这是计算它的正确方法链接公式的分子,也许这就是你完全错误距离的原因。)

    float _numerator = abs((b * xB) - (a * yB) - (b * x1) + (a * y1));
    // for the 1. test values: (-0.3 * 5) - (-0.7 * 5) - (-0.3 * 7) + (-0.7 * 7) = -1.5 + 3.5 + 2.1 - 4.9 = -0.8 => abs(-0.8) = 0.8
    // for the 2. test values: (-0.3 * 5.5) - (-0.7 * 4) - (-0.3 * 7) + (-0.7 * 7) = -1.65 + 2.8 + 2.1 - 4.9 = -1.65 => abs(-1.65) = 1.65
    

    分母如下:

    float _denomimator = sqrt((a * a) + (b * b));
    // for the 1. test values: (-0.7 * -0.7) + (-0.3 * -0.3) = 0.49 + 0.09 = 0.58 => sort(0.58) = 0.76
    // for the 2. test values: (-0.7 * -0.7) + (-0.3 * -0.3) = 0.49 + 0.09 = 0.58 => sort(0.58) = 0.76
    

    距离现在很明显:

    float _distance = _numerator / _denominator;
    // for the 1. test values: 0.8 / 0.76 = 1.05
    // for the 2. test values: 1.65 / 0.76 = 2.17
    

    这些结果(1.052.17)是我们随机值的正确距离,如果您可以在纸上绘制线条和点,您可以测量距离,你会得到相同的值,使用标准标尺。