I Gitter basierend Karte hat, und ich versuche, ein Prädikat zu entwickeln, die mir den diagonalen Abstand zwischen zwei Punkten gibt, ist es das, was ich habe,Prolog, diagonal Abstand
dist_diagonal((X,Y),(X,W),Passos,D):-
dist_ortogonal((X,Y),(X,W),D1),
D is D1 + Passos.
dist_diagonal((X,Y),(Z,Y),Passos,D):-
dist_ortogonal((X,Y),(Z,Y),D1),
D is D1 + Passos.
dist_diagonal((X,Y),(Z,W),Passos,_):-
X>Z,
Y<W,
Passos1 is Passos+1,
X1 is X-1,
Y1 is Y+1,
dist_diagonal((X1,Y1),(Z,W),Passos1,_).
dist_diagonal((X,Y),(Z,W),Passos,_):-
X<Z,
Y<W,
Passos1 is Passos+1,
X1 is X+1,
Y1 is Y+1,
dist_diagonal((X1,Y1),(Z,W),Passos1,_).
aber wenn ich versuche, testen:
dist_diagonal((5,4),(3,8),0,D).
ich true
anstelle eines Wertes für D
Was mit meinem Prädikat falsch?
PS: Ich sollte hinzufügen, dass ich werde dies mit Punkten nur verwenden, die Y<Z
verrify. PS2: Beachten Sie, dass ich die Entfernung mit 8 Arten von Bewegungen berechnen, nicht die euklidische Distanz. Diagonal distance
Vielen Dank !!!! – user3636673
Froh, dass geholfen hat !! – coder