Automatically calculate weight from distance

This commit is contained in:
Markus Koch 2020-05-02 17:13:27 +02:00
parent 788ff7af02
commit 6a546f6138
3 changed files with 20 additions and 2 deletions

View File

@ -147,6 +147,17 @@ struct dijkstra_path *dijkstra_path_dup_shallow(struct dijkstra_path *path)
return dup; return dup;
} }
dijkstra_cost dijkstra_get_weight_from_distance(struct dijkstra_node *node_a,
struct dijkstra_node *node_b)
{
float dist;
dist = sqrt(pow(node_a->position.x - node_b->position.x, 2) +
pow(node_a->position.y - node_b->position.y, 2));
return (dijkstra_cost) dist;
}
/*! /*!
* \brief dijkstra_path_new creates a new dijkstra_path between two nodes. * \brief dijkstra_path_new creates a new dijkstra_path between two nodes.
* \param name the name of the path (pointer is not copied and must stay valid!) * \param name the name of the path (pointer is not copied and must stay valid!)
@ -162,7 +173,11 @@ struct dijkstra_path *dijkstra_path_new(char *name,
path = malloc(sizeof(*path)); path = malloc(sizeof(*path));
if (path) { if (path) {
path->name = name; path->name = name;
path->weight = weight; if (path->weight == DIJKSTRA_WEIGHT_AUTO)
path->weight = dijkstra_get_weight_from_distance(source,
destination);
else
path->weight = weight;
dijkstra_connect_nodes_to_path(source, destination, path); dijkstra_connect_nodes_to_path(source, destination, path);
} }

View File

@ -3,6 +3,8 @@
#include <glib.h> #include <glib.h>
#define DIJKSTRA_WEIGHT_AUTO (-1)
typedef int dijkstra_cost; typedef int dijkstra_cost;
struct dijkstra_solver { struct dijkstra_solver {

View File

@ -83,7 +83,8 @@ int add_geojson_to_dijkstra(struct dijkstra_solver *solver,
dijkstra_path_new_to_list(solver, dijkstra_path_new_to_list(solver,
x_last, y_last, x_last, y_last,
x, y, x, y,
name, 1); name,
DIJKSTRA_WEIGHT_AUTO);
} }
x_last = x; x_last = x;