/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * ##### # # # * * #### ##### ###### # # # # # # # * * # # # # # ## # # # # # * * # # # # ##### # # # # #### # ### * * # # ##### # # # # # # # # # # * * # # # # # ## # # # # # # * * #### # ###### # # ##### ##### # # * * * * This file is part of openGJK. * * * * openGJK 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 3 of the License, or * * any later version. * * * * openGJK 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 Foobar. If not, see . * * * * openGJK: open-source Gilbert-Johnson-Keerthi algorithm * * Copyright (C) Mattia Montanari 2018 - 2019 * * http://iel.eng.ox.ac.uk/?page_id=504 * * * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * * * This file runs an example to illustrate how to invoke the openGJK lib * * within a C program. An executable called 'demo' can be compiled with * * CMake. This reads the coordinates of two polytopes from the input * * files userP.dat and userQ.dat, respectively, and returns the minimum * * distance between them computed using the openGJK library. * * * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ /** * @file main.c * @author Mattia Montanari * @date April 2018 * @brief File illustrating an application that invokes openGJK. * */ #define _CRT_HAS_CXX17 0 #include /* For importing openGJK this is Step 1: include header in subfolder. */ #include "openGJK/openGJK.h" #ifndef WIN32 #define fscanf_s fscanf #endif /** * @brief Function for reading input file with body's coordinates. * */ int readinput ( const char *inputfile, double ***pts, int * out ) { int npoints = 0; int idx = 0; FILE *fp; /* Open file. */ #ifdef WIN32 errno_t err; if ((err = fopen_s(&fp, inputfile, "r")) != 0) { #else if ((fp = fopen(inputfile, "r")) == NULL) { #endif fprintf(stdout, "ERROR: input file %s not found!\n", inputfile); fprintf(stdout, " -> The file must be in the folder from which this program is launched\n\n"); return 1; } /* Read number of input vertices. */ if (fscanf_s(fp, "%d", &npoints) != 1) return 1; /* Allocate memory. */ double **arr = (double **)malloc(npoints * sizeof(double *)); for (int i=0; i