Automatically calculate weight from distance
This commit is contained in:
parent
788ff7af02
commit
6a546f6138
@ -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);
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user