方向为对角线1像素时的长度为1.4142135623730950488016887242097。
这个因素背后的数学是纯向量数学,让我解释一下。根据向量数学,我们可以将二维向量的长度计算为Math.Sqrt(Vector.X * Vector.X + Vector.Y * Vector.Y))。如果我们以原点(0,0)和目标(1,1)为起点,我们知道原点和目标之间的距离向量为(1,1)。所以,如果我们计算这个向量的长度,我们会得到:sqrt(1 * 1 + 1 * 1) 减少的是 sqrt(2) 并产生 1.4142135623730950488016887242097 的结果。
您可以使用矢量数学来计算一堆像素,而不是添加这个因子来获得更好的精度,要做到这一点只需应用前面的数学:
distanceVector = targetVector - originVector
distance = sqrt(distanceVector.X * distanceVector.X + distanceVector.Y * distanceVector.Y)
如果您使用 System.Numeric 包,那么您可以使用集成函数:
Vector2 origin = new Vector2(originPixelX, originPixelY);
Vector2 target = new Vector2(targetPixelX, targetPixelY);
Vector2 distanceVector = target - origin;
float length = distanceVector.Length();
编辑:
为了简化您的问题,有一个非常简单的解决方案可以为您提供最佳精度。
如果您将两个变量中的直线像素和对角像素的总和相加,让我们将这些直线像素和对角像素命名为您可以这样做:
var length = straightPixels + (new Vector2(diagonalPixels, diagonalPixels)).Length();
如果您不想使用 System.Numeric,您可以这样做:
var length = straightPixels + Math.Sqrt(diagonalPixels * diagonalPixels + diagonalPixels * diagonalPixels);
非常简单有效。