Hacker News new | past | comments | ask | show | jobs | submit login
Donut math: how donut.c works (a1k0n.net)
196 points by mr_o47 on Sept 17, 2023 | hide | past | favorite | 14 comments



Reminds me of this classic IOCCC entry implementing a flight simulator, where portions of the source code are formatted to resemble a plane:

https://www.ioccc.org/1998/banks.orig.c

https://www.ioccc.org/years.html#1998_banks


Interesting.

Tangentially reminds me of my own animated GIF app that I made a while ago.

https://www.gifcii.fun


This is seriously cool


That’s the kind of thing that had me learn coding many years ago ( watching demoscene productions).


What platform does this compile on? Didn't work for me on a recent model M1 MacBook Pro.


I got it to compile in Linux on x86-64, with the following tiny changes:

- Add #include <stdio.h> (for printf())

- Add #include <string.h> (for memset())

- Add "int" before the initial bare declaration of "k"

I compiled it with:

    $ gcc -o donut -std=c89 donut.c -lm
Which includes:

- Specifying an old language standard to get rid of the need to say "int" before main()

- Linking the math library ("-lm") for the trig functions.

Update: minor grammar and clarification.


With -std=c89 you shouldn't need that `int k`, right?

Further, you can add includes on the command line

    cc -std=c89 donut.c -include stdio.h -include string.h -include math.h -lm
Then the source can be left as is.


It should compile without the #includes, possibly didplaying some compiler warnings.


Yeap. A

   gcc -lm donut.c
is enough. Also type and return type default to `int` so this doesn't need change either.


What were the errors?


(2011)


reminds me of stuff i based in basic when i was a kid

made me laugh to see "no raytracing", then immediate use of the perspective projection which is intersecting points and a plane along a ray lol...


Deriving the perspective projection equations involves intersecting a ray and the projection plane, but this doesn't magically turn a rasterizer into a raytracer.


it's boutique hand-derived ray tracing! very different




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: