From 008cf63a05d7be6ed165747ec5e735e002de3b2d Mon Sep 17 00:00:00 2001 From: sanine Date: Tue, 25 Jan 2022 22:59:44 -0600 Subject: add quadtree and basic world model --- experimental/tectonics/tectonics.h | 76 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 experimental/tectonics/tectonics.h (limited to 'experimental/tectonics/tectonics.h') diff --git a/experimental/tectonics/tectonics.h b/experimental/tectonics/tectonics.h new file mode 100644 index 0000000..5f39ff7 --- /dev/null +++ b/experimental/tectonics/tectonics.h @@ -0,0 +1,76 @@ +#ifndef TECTONICS_H +#define TECTONICS_H + +#include +#include +#include + +struct point_t { + double x, y; + void *data; +}; + + +struct quad_region_t { + struct point_t center; + double half_dim; +}; + + +struct quadtree_node_t { + struct quad_region_t region; + + int id; + + /* children */ + struct quadtree_node_t *nw, *ne, *sw, *se; +}; + + +struct world_t { + struct point_t *points; + struct quadtree_node_t tree; + int n_points; +}; + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * quadtree + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +bool contains_point(struct quad_region_t region, struct point_t pt); +struct quadtree_node_t new_node(struct point_t center, double half_dim); +void subdivide(struct quadtree_node_t *node, struct point_t *points); +bool insert(struct quadtree_node_t *node, + struct point_t *points, int id); +int get_closest(struct quadtree_node_t *root, + struct point_t pt); +void draw_quadtree(cairo_t *cr, struct quadtree_node_t *root); + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * util + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +void get_cairo_size(cairo_t *cr, int *width, int *height); +double rand01(); +double distance(double x0, double y0, double x1, double y1); + + +/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * + * worlds + * + * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + */ + +void create_world(struct world_t *world, int n_points); +void free_world(struct world_t *world); +void render_world(cairo_t *cr, struct world_t *world); +void run_world_step(struct world_t *world); + +#endif -- cgit v1.2.1