From 801b92b6d788d9f693612c0120e96b6b1ceb0e0a Mon Sep 17 00:00:00 2001 From: David Robillard Date: Sun, 19 Aug 2018 21:16:19 +0200 Subject: Add example programs --- bin/chilbert_obj.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++ bin/chilbert_svg.cpp | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 117 insertions(+) create mode 100644 bin/chilbert_obj.cpp create mode 100644 bin/chilbert_svg.cpp (limited to 'bin') diff --git a/bin/chilbert_obj.cpp b/bin/chilbert_obj.cpp new file mode 100644 index 0000000..85fe95a --- /dev/null +++ b/bin/chilbert_obj.cpp @@ -0,0 +1,54 @@ +/* + Copyright (C) 2018 David Robillard + + This program is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation, either version 2 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see . +*/ + +#include "chilbert/chilbert.hpp" + +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc != 2) { + fprintf(stderr, "Usage: %s NUM_POINTS\n", argv[0]); + return 1; + } + + const unsigned long num_points = std::strtoul(argv[1], nullptr, 10); + if (num_points == 0 || num_points == ULONG_MAX) { + fprintf(stderr, "Usage: %s NUM_POINTS\n", argv[0]); + return 1; + } + + // Vertices + for (uint64_t i = 0; i < num_points; ++i) { + std::array point; + chilbert::index_to_coords(point.data(), 16, 3, i); + printf("v %u %u %u\n", point[0], point[1], point[2]); + } + + // One polyline through all vertices + printf("\nl"); + for (unsigned i = 0; i < num_points - 1; ++i) { + printf(" %u", i + 1); + } + printf("\n"); + + return 0; +} diff --git a/bin/chilbert_svg.cpp b/bin/chilbert_svg.cpp new file mode 100644 index 0000000..7c63042 --- /dev/null +++ b/bin/chilbert_svg.cpp @@ -0,0 +1,63 @@ +/* + Copyright (C) 2018 David Robillard + + This program is free software: you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free Software + Foundation, either version 2 of the License, or (at your option) any later + version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + details. + + You should have received a copy of the GNU General Public License along with + this program. If not, see . +*/ + +#include "chilbert/chilbert.hpp" + +#include +#include +#include +#include +#include + +int +main(int argc, char** argv) +{ + if (argc != 2) { + fprintf(stderr, "Usage: %s NUM_POINTS\n", argv[0]); + return 1; + } + + const unsigned long num_points = std::strtoul(argv[1], nullptr, 10); + if (num_points == 0 || num_points == ULONG_MAX) { + fprintf(stderr, "Usage: %s NUM_POINTS\n", argv[0]); + return 1; + } + + const uint32_t w = + uint32_t(sqrt(1 << uint32_t(ceil(log2(num_points))))) - 1; + + // Header + printf("\n", + w, + w); + printf("Hilbert Curve\n"); + printf("\n\n"); + + return 0; +} -- cgit v1.2.1