diff --git a/CMakeLists.txt b/CMakeLists.txt index d8a9e5d33..3c81b4310 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,6 +136,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/generateFaceCenterPoint.c src/apps/miscapps/h3ToHier.c src/apps/benchmarks/benchmarkPolyfill.c @@ -253,6 +254,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(generateFaceCenterPoint src/apps/miscapps/generateFaceCenterPoint.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}) 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(); +}