## To build: ``` make ``` If you wish to change the size (see the [Author's remarks](#authors-remarks) below) you can do so with the `SIZE` variable. For instance you can do: ``` make clobber SIZE=50,50 all ``` but you can also do this directly with the [endoh4.sh](%%REPO_URL%%/2013/endoh4/endoh4.sh) script as described below. ### Bugs and (Mis)features: The current status of this entry is: > **STATUS: INABIAF - please DO NOT fix** For more detailed information see [2013/endoh4 in bugs.html](../../bugs.html#2013_endoh4). ## To use: ``` ./endoh4 < file ./endoh4.sh file ``` The second form is preferable as it will temporarily make the cursor invisible as recommended by the author. If no file is specified in the `./endoh4.sh` command line it will feed to the program [endoh4.c](%%REPO_URL%%/2013/endoh4/endoh4.c). ## Try: ``` ./endoh4.sh cube.txt ``` Hit ctrl-c to end the program. The author recommends the use of xterm. For an example, if you are a football/soccer fan, try: ``` ./endoh4.sh solids/archimedian-solid/a11-truncated-icosahedron.txt ``` You can provide more than one file: ``` ./endoh4.sh solids/archimedian-solid/a11-truncated-icosahedron.txt cube.txt ``` Hit ctrl-c/intr to go to the next file. If you wish to change the size to `50,50` without passing any arg: ``` SIZE=50,50 ./endoh4.sh ``` Not specifying a file feeds [endoh4.c](%%REPO_URL%%/2013/endoh4/endoh4.c) to the program. ## Judges' remarks: This program is formatted as the net for a tetrahedron (hint: try feeding the program it's own source code like `./endoh4.sh`). When it runs there is an animation for the computation to work out the convex hull. ## Author's remarks: ### Spec This is a convex polyhedron viewer, which: 1. reads three-dimensional vertices (3N float values) from `stdin`, 2. calculates a convex hull of them, and 3. renders it. This simple spec involves many details. * 3D convex hull calculation * recursive gift wrapping algorithm * automatic merging of (almost) co-planar faces (i.e., faces are not triangulated) * random perturbation for robustness * 3D rendering * perspective projection * ASCII line drawing: `"',;;;,;'"` * camera in a spherical spiral orbit (Note that this program does not use `math.h`.) ### Portability I think it conforms with both C89 and C99. I confirmed that it worked on gcc, clang, and tcc. It should not trigger warnings with `-pedantic` and `-Wextra`. ### Tips You may want to use `tput` to hide the terminal cursor. ``` tput civis ./endoh4 < cube.txt tput cnorm ``` or ``` ./endoh4.sh cube.txt ``` ### Bonuses You can change the screen size. Let the aspect ratio be about 3:1. ``` cc -DS=120,40 -o endoh4 endoh4.c ``` The shape of this code is the geometric net of a regular tetrahedron. So, try: ``` ./endoh4 < endoh4.c # or ./endoh4.sh ``` The `solids` directory includes various solid data: - [Platonic solids](http://en.wikipedia.org/wiki/Platonic_solid) - [Archimedean solids](http://en.wikipedia.org/wiki/Archimedean_solid) - [Prisms](http://en.wikipedia.org/wiki/Prism_%28geometry%29) - [Antiprisms](http://en.wikipedia.org/wiki/Antiprism) - [Bipyramids](http://en.wikipedia.org/wiki/Bipyramid) - [Trapezohedrons](http://en.wikipedia.org/wiki/Trapezohedron) - [Johnson solids](http://en.wikipedia.org/wiki/Johnson_solid) I created the files by using the POV-Ray scripts ([1](http://en.wikipedia.org/wiki/File:Poly.pov) and [2](http://en.wikipedia.org/wiki/User:AndrewKepert/poly.pov) in Wikipedia. They are copyrighted in CC BY-SA 3.0 by "User:Cyp" and "User:AndrewKepert".