Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
tikz_voronoi_power_example.cc
Go to the documentation of this file.
1#include <fstream>
2#include <iostream>
3#include <string>
4
6
7using namespace Aleph;
8
9int main(int argc, char * argv[])
10{
11 const std::string output_path =
12 argc > 1 ? argv[1] : "tikz_voronoi_power_example.tex";
13
14 std::ofstream out(output_path);
15 if (not out)
16 {
17 std::cerr << "Cannot open output file: " << output_path << '\n';
18 return 1;
19 }
20
21 DynList<Point> sites;
22 sites.append(Point(-24, -10));
23 sites.append(Point(-8, 16));
24 sites.append(Point(6, -14));
25 sites.append(Point(20, 8));
26 sites.append(Point(32, -4));
27 sites.append(Point(12, 22));
28
29 // Figure 1: Delaunay + Voronoi.
30 Tikz_Plane vor_plane(210, 120, 6, 6);
31 vor_plane.put_cartesian_axis();
32 vor_plane.set_point_radius_mm(0.75);
33
35 const auto dt = dt_algo(sites);
37 tikz_wire_style("blue"),
38 false);
39
41 vor_plane, sites, VoronoiDiagram(),
42 false,
43 tikz_area_style("gray!50!black", "gray!15", 0.25),
44 tikz_wire_style("black"),
45 tikz_wire_style("black", true, true),
46 tikz_points_style("red"),
47 Geom_Number(65));
48
49 put_in_plane(vor_plane, Text(Point(-26, 26), "Voronoi + Delaunay Overlay"),
51
52 // Figure 2: Power diagram.
54 weighted.append({Point(-22, -8), Geom_Number(2)});
55 weighted.append({Point(-7, 15), Geom_Number(9)});
56 weighted.append({Point(8, -11), Geom_Number(1)});
57 weighted.append({Point(22, 10), Geom_Number(5)});
58 weighted.append({Point(34, -3), Geom_Number(7)});
59 weighted.append({Point(10, 21), Geom_Number(3)});
60
61 Tikz_Plane power_plane(210, 120, 6, 6);
62 power_plane.put_cartesian_axis();
63 power_plane.set_point_radius_mm(0.75);
64
67 true,
68 tikz_area_style("violet", "violet!18", 0.35),
69 tikz_wire_style("violet"),
70 tikz_points_style("purple"));
71
72 put_in_plane(power_plane, Text(Point(-24, 26), "Power Diagram (Weighted Voronoi)"),
74
75 out << "\\documentclass[tikz,border=8pt]{standalone}\n"
76 << "\\usepackage{tikz}\n"
77 << "\\begin{document}\n\n";
78 vor_plane.draw(out, true);
79 out << "\n\\vspace{5mm}\n\n";
80 power_plane.draw(out, true);
81 out << "\n\\end{document}\n";
82
83 std::cout << "Generated " << output_path << '\n'
84 << "Compile with: pdflatex " << output_path << '\n';
85
86 return 0;
87}
88
Simple dynamic array with automatic resizing and functional operations.
Definition tpl_array.H:139
T & append(const T &data)
Append a copy of data
Definition tpl_array.H:245
O(n log n) expected-time Delaunay's triangulation.
Dynamic singly linked list with functional programming support.
Definition htlist.H:1155
T & append(const T &item)
Definition htlist.H:1271
Represents a point with rectangular coordinates in a 2D plane.
Definition point.H:229
Power diagram (weighted Voronoi diagram).
Represents a text string positioned at a 2D point.
Definition point.H:2739
2D TikZ canvas storing geometry objects and emitting LaTeX output.
Definition tikzgeom.H:184
static constexpr int Layer_Overlay
Definition tikzgeom.H:189
O(n log n) Voronoi diagram construction.
Main namespace for Aleph-w library functions.
Definition ah-arena.H:89
void put_in_plane(Tikz_Plane &plane, const Geom &geom_obj)
Insert any supported geometry type in a Tikz_Plane.
Definition tikzgeom.H:1456
PowerDiagram::Result visualize_power_diagram(Tikz_Plane &plane, const Array< PowerDiagram::WeightedSite > &sites, const PowerDiagram &algorithm={}, const bool draw_cells=true, const Tikz_Style &cell_style=tikz_area_style("violet", "violet!18", 0.35), const Tikz_Style &edge_style=tikz_wire_style("violet"), const Tikz_Style &site_style=tikz_points_style("purple"))
Compute and insert Power diagram for weighted sites.
VoronoiDiagram::Result visualize_voronoi(Tikz_Plane &plane, const DynList< Point > &sites, const VoronoiDiagram &algorithm={}, const bool draw_cells=false, const Tikz_Style &cell_style=tikz_area_style("gray!50!black", "gray!15", 0.35), const Tikz_Style &edge_style=tikz_wire_style("black"), const Tikz_Style &unbounded_edge_style=tikz_wire_style("black", true, true), const Tikz_Style &site_style=tikz_points_style("red"), const Geom_Number &unbounded_ray_length=Geom_Number(50))
Compute and insert Voronoi diagram for input sites.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
mpq_class Geom_Number
Numeric type used by the geometry module.
Definition point.H:115
Tikz_Style make_tikz_draw_style(const std::string &draw_color)
Create a basic draw style with a custom color.
Definition tikzgeom.H:156
Tikz_Style tikz_wire_style(const std::string &color="black", const bool dashed=false, const bool with_arrow=false)
Creates a style optimized for wireframe segments and polygons.
Tikz_Style tikz_area_style(const std::string &draw_color="black", const std::string &fill_color="gray!25", const double opacity=0.6)
Creates a style for drawing filled polygons.
void put_delaunay_result(Tikz_Plane &plane, const DelaunayTriangulationBowyerWatson::Result &dt, const Tikz_Style &triangle_style=tikz_wire_style("blue"), const bool draw_sites=true, const Tikz_Style &site_style=tikz_points_style("black"), const int triangle_layer=Tikz_Plane::Layer_Default, const int site_layer=Tikz_Plane::Layer_Foreground)
Insert Delaunay triangulation as triangle outlines.
Tikz_Style tikz_points_style(const std::string &color="black", const double opacity=-1.0)
Creates a style optimized for point clouds.
Helpers to visualize computational-geometry algorithm results in TikZ.