1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| function Distance(Courbe1,Courbe2:array of TPoint;i,j:integer):Extended;
var P1,P2:TPoint;
c:Extended;
begin
P1:=Courbe1[i-1];
P2:=Courbe2[j-1];
//distance entre le point n°1 et le point n°2
c:=sqrt((P1.X-P2.X)*(P1.X-P2.X)+(P1.Y-P2.Y)*(P1.Y-P2.Y));
result:=c;
end;
function Minimum(a,b,c:real):real;
var Mini:real;
begin
mini:=100000;
if a<mini then mini:=a;
if b<mini then mini:=b;
if c<mini then mini:=c;
result:=mini;
end;
function DistanceDTW(Courbe1,Courbe2:array of TPoint):real;
var d:array of array of real;
DTW:array of array of real;
i,j,n,m:integer;
cout:real;
begin
n:=High(Courbe1)+1;
m:=High(Courbe2)+1;
SetLength(d,n+1,m+1);
for i:=1 to n do
for j:=1 to m do
d[i,j]:=Distance(Courbe1,Courbe2,i,j);
SetLength(DTW,n+1,m+1);
for i:=1 to m do DTW[0,i]:=100000;
for i:=1 to n do DTW[i,0]:=100000;
DTW[0,0]:=0;
for i:=1 to n do
for j:=1 to m do
begin
cout:=d[i,j];
DTW[i,j]:=Minimum(DTW[i-1,j]+cout,DTW[i,j-1]+cout,DTW[i-1,j-1]+2*cout);
end;
result:=DTW[n,m];
end; |
Partager