更快的方法:总和(斜边)/计数

时间:2016-07-31 19:37:57

标签: math

我有一个非常简单的公式,可以将距离增加到从中心(斑点)测量的像素。每个距离乘以一个特定值(像素的亮度)。

for each pixel:
   distance += sqrt(dx*dx+dy*dy) * brightness
   sumBr += brightness

finally:
distance /= sumBr

dx和dy可以是非整数,因为它们是从亮度计算的中心的增量(每个像素x *亮度和y *亮度除以亮度之和)。

这使我能够准确读取(斑点的)平均距离。

这一切都运行正常,但有时Math.sqrt()函数占用了大量的处理时间,我认为这可能是不必要的。

这个问题可能很简单,但我还没有成功解决它。

已添加:一次尝试

float sumX = 0f;
float sumY = 0f;
float sumBr = 0f;

for pixels:
   sumX += Math.abs(dx) * brightness
   sumY += Math.abs(dy) * brightness
   sumBr += brightness;

finally:
sumX /= sumBr;
sumY /= sumBr;
float distance = Math.sqrt(sumX * sumX + sumY * sumY);

这次尝试给我的偏差约为10%。使用sqrt in loop:0.342,0.101且不含:0.319,0.093。我想知道哪个更准确,因为最后一个看起来不太可能有精确丢失的麻烦。我想我必须写一个测试才能找到答案,但不幸的是,我现在还没时间去研究它。

编辑:经过一番思考后,上述情况永远不会奏效。

0 个答案:

没有答案