我有一个沿向量移动的精灵(-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);
}
答案 0 :(得分:2)
让我们根据原始link的内容再次实施公式。
这里的测试是两行随机值:
a = -0.7; b = -0.3; x1 = 7; y1 = 7; xB = 5; yB = 5;
a = -0.7; b = -0.3; x1 = 7; y1 = 7; xB = 5.5; yB = 4;
分子如下:(看来你是以一种未知的方式计算分子,我不明白为什么你这样做,因为这是计算它的正确方法链接公式的分子,也许这就是你完全错误距离的原因。)
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.05
和2.17
)是我们随机值的正确距离,如果您可以在纸上绘制线条和点,您可以测量距离,你会得到相同的值,使用标准标尺。