As in
sgit -e 's/\([Aa]uthor.*\)comments/\1remarks/g' -e 's/\([Jj]udge.*\)comments/\1remarks/g' '*README.md'
Best of show
Mauro Persano
São Paulo
Brazil
mauro_persano@yahoo.com
To build:
make
To run:
./persano p q [num frames]
Try:
./persano 3 16 > knot3-16.gif
Open the GIF file with a viewer capable of displaying animated GIFs and watch closely at the bottom of the picture (you may need to use "gifsicle" - a great tool to manipulate animated GIFs - to slow down the animation and to compress the GIFs generated by the entry).
Judges' remarks:
If your system is one of those that distinguish between text and binary streams, you must know what to do to switch the standard output into binary mode (e.g., adding a line to the source code or specifying a linker option).
What needs to be done to fix the problem?
Solving the author's exercises below may or may not help.
At the time of judging, the approximation of π used in the program could not be found on mathworld.com.
Author's remarks:
NAME
knot
writes animated GIF images of rendered torus knots to standard output.
SYNOPSIS
knot p q [num frames]
DESCRIPTION
A (p,q)-torus knot is a closed, non-intersecting curve on the surface of a torus in R3 that winds p times around one cycle of the torus and q times around the other. p and q should be coprime; otherwise, the resulting curve will not be a knot (that is, imagining the resulting curve as a loop of rubber, there will be a way to bend, twist and stretch it, without cutting it [1], until it ends up looking just like a circle embedded in R3 [2]).
Sample usage:
./persano 3 2 1 > foo.gif
writes a non-animated GIF (a single frame) stream of a rendered trefoil knot to the file foo.gif.
./persano 5 2
writes a GIF stream with a rendering of Solomon's Seal knot to standard output; since the number of frames is not specified, an animation with 40 frames will be written.
Please view the code with 8-character tabs!
OUTPUT FORMAT
The program writes fully valid GIF 89 streams.
It is suggested that the output be viewed with a program capable of displaying animated GIFs, such as almost any graphical HTTP browser.
Due to code size constraints, full LZW compression was not implemented [3]. In fact, the output images are even somewhat expanded, thanks to GIF overhead.
The GIF format supports only a limited number of bits per pixel, so the program uses ordered dithering to emulate full RGB output.
PORTABILITY
The program was tested on Linux, with gcc 3.1; Cygwin, with gcc 3.3; and Solaris/Sparc, with Sun's C compiler.
The only major portability issue should be reliance on ASCII.
It should also be mentioned that the program won't work on systems that distinguish between text and binary streams; however, since hardly anyone uses such systems in this day and age, this is a minor issue. [4]
EXERCISES FOR THE READER
-
(1 point) The surface is composed of many small polygons. Try to make it smoother by increasing the number of polygons.
-
(2 points) Figure out how to change the radius of the tube cross section.
-
(5 points) Locate the famous transcendental constant π in the code.
FOOTNOTES
[1] You can call such a transformation an "ambient isotopy" if you want to impress people at parties.
[2] Also known as the "unknot", which sounds slightly less impressive than "ambient isotopy".
[3] Unfortunately (for the author), the convenient excuse that LZW compression was not implemented in order to avoid the Unisys patent can no longer be used.
[4] ;)
Copyright and CC BY-SA 4.0 License:
This file is Copyright (c) 2023 by Landon Curt Noll. All Rights Reserved. You are free to share and adapt this file under the terms of this license:
Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
For more information, see: https://creativecommons.org/licenses/by-sa/4.0/