From 25a4bde61f640791bf86a2a2b4b9bc9fa047c28e Mon Sep 17 00:00:00 2001 From: Isaac Brodsky Date: Mon, 4 Jun 2018 11:20:21 -0700 Subject: [PATCH] Add the formula for number of indexes per resolution --- CMakeLists.txt | 2 + src/apps/miscapps/generateNumHexagons.c | 55 +++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/apps/miscapps/generateNumHexagons.c diff --git a/CMakeLists.txt b/CMakeLists.txt index fc7dd4543..6aacb10c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -133,6 +133,7 @@ set(OTHER_SOURCE_FILES src/apps/miscapps/h3ToGeoBoundaryHier.c src/apps/miscapps/h3ToGeoHier.c src/apps/miscapps/generateBaseCellNeighbors.c + src/apps/miscapps/generateNumHexagons.c src/apps/miscapps/h3ToHier.c src/apps/benchmarks/benchmarkPolyfill.c src/apps/benchmarks/benchmarkH3Api.c) @@ -249,6 +250,7 @@ add_h3_executable(h3ToGeoBoundary src/apps/filters/h3ToGeoBoundary.c ${APP_SOURC add_h3_executable(hexRange src/apps/filters/hexRange.c ${APP_SOURCE_FILES}) add_h3_executable(kRing src/apps/filters/kRing.c ${APP_SOURCE_FILES}) add_h3_executable(generateBaseCellNeighbors src/apps/miscapps/generateBaseCellNeighbors.c ${APP_SOURCE_FILES}) +add_h3_executable(generateNumHexagons src/apps/miscapps/generateNumHexagons.c ${APP_SOURCE_FILES}) add_h3_executable(h3ToGeoBoundaryHier src/apps/miscapps/h3ToGeoBoundaryHier.c ${APP_SOURCE_FILES}) add_h3_executable(h3ToGeoHier src/apps/miscapps/h3ToGeoHier.c ${APP_SOURCE_FILES}) add_h3_executable(h3ToHier src/apps/miscapps/h3ToHier.c ${APP_SOURCE_FILES}) diff --git a/src/apps/miscapps/generateNumHexagons.c b/src/apps/miscapps/generateNumHexagons.c new file mode 100644 index 000000000..41326dc29 --- /dev/null +++ b/src/apps/miscapps/generateNumHexagons.c @@ -0,0 +1,55 @@ +/* + * Copyright 2018 Uber Technologies, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +/** @file generateNumHexagons.c + * @brief Generates the tables for numHexagons. + * + * usage: `generateNumHexagons` + * + * This program generates the number of unique indexes (not necessarily + * hexagons) at each H3 resolution. It assumes aperture 7 and 12 pentagons + * per resolution. + */ + +#include +#include +#include +#include "constants.h" + +#define NUM_PENTAGONS 12 + +/** + * Generates and prints the numHexagons table. + */ +static void generate() { + printf("static const int64_t nums[] = {\n"); + int64_t count = NUM_BASE_CELLS; + for (int i = 0; i <= MAX_H3_RES; i++) { + printf(" %" PRId64 "L,\n", count); + // Each hexagon has 7 children, and each pentagon has 6 children + count = ((count - NUM_PENTAGONS) * 7) + (NUM_PENTAGONS * 6); + } + printf("};\n"); +} + +int main(int argc, char* argv[]) { + // check command line args + if (argc > 1) { + fprintf(stderr, "usage: %s\n", argv[0]); + exit(1); + } + + generate(); +}