shithub: asif

Download patch

ref: f09e8fb805ae93f613f29fb30fa5de5d1980d891
parent: e66c8868c7cf48c23f2c49e2bb933784a1a02d6d
author: qwx <qwx@sciops.net>
date: Thu Nov 3 22:25:33 EDT 2022

path: chebyshev distance

--- a/path/grid.c
+++ b/path/grid.c
@@ -32,6 +32,16 @@
 }
 
 double
+chebdist(Node *a, Node *b)
+{
+	int dx, dy;
+
+	dx = abs(a->x - b->x);
+	dy = abs(a->y - b->y);
+	return 1 * (dx + dy) + MIN(dx, dy) * (1 - 2 * 1);
+}
+
+double
 manhdist(Node *a, Node *b)
 {
 	int dx, dy;
@@ -56,9 +66,11 @@
 unitmovecost(Node *a, Node *b)
 {
 	Vertex Δ;
+	double f;
 
 	Δ = ΔV(*b, *a);
-	return Δ.x != 0 && Δ.y != 0 ? 1.001 : 1.0;
+	f = distfn == octdist ? SQRT2 : 1.001;
+	return Δ.x != 0 && Δ.y != 0 ? f : 1.0;
 }
 
 int
--- a/path/path.h
+++ b/path/path.h
@@ -25,9 +25,11 @@
 	Deuclid,
 	Dmanhattan,
 	Doctile,
+	Dchebyshev,
 };
 double	eucdist(Node*, Node*);
 double	octdist(Node*, Node*);
+double	chebdist(Node*, Node*);
 double	manhdist(Node*, Node*);
 extern double	(*distfn)(Node*, Node*);