## 2008. június 14., szombat

### How to measure the distance between two points

Problem/Question/Abstract:

I need to measure a distance between two points to compute an intensity value. Currently I use

Dx := i - Cur.X;
Dy := j - Cur.Y;
Distance := Round(Sqrt(Dx * Dx + Dy * Dy));

Is there a faster way to compute this? Distance is an integer type so I was hoping to get a reasonably accurate solution as this method seems to produce. Problem is that it slows things down a bit.

You can calculate the angle and then make a lookup table for the value to be used to multiply the Y-axis. Try this:

program DCDemo;

{\$APPTYPE CONSOLE}

uses
SysUtils, Math, My_Crt32;

const

var
DistSinArray: array[1..359] of Extended;

function Calcdist(const dX, dY: LongInt): LongInt;
var
Angle, n: word;
begin
if (dX <> 0) then
begin
if (dY <> 0) then
begin
Angle := Round(ArcTan(dY / dX) * RadToDegFact);
Result := Round(dY / DistSinArray[Angle]);
end
else
Result := dX;
end
else
Result := dY;
end;

var
dX, dY: LongInt;
begin
{First time operation}
for dX := 1 to 359 do