Skip to content

Instantly share code, notes, and snippets.

@gcr
Created July 11, 2011 00:27
Show Gist options
  • Star 81 You must be signed in to star a gist
  • Fork 37 You must be signed in to fork a gist
  • Save gcr/1075131 to your computer and use it in GitHub Desktop.
Save gcr/1075131 to your computer and use it in GitHub Desktop.
int k;
double sin() ,cos();
main(){
float A=0, B=0, i, j, z[1760];
char b[1760];
printf("\x1b[2J");
for(; ; ) {
memset(b,32,1760);
memset(z,0,7040);
for(j=0; 6.28>j; j+=0.07) {
for(i=0; 6.28 >i; i+=0.02) {
float sini=sin(i),
cosj=cos(j),
sinA=sin(A),
sinj=sin(j),
cosA=cos(A),
cosj2=cosj+2,
mess=1/(sini*cosj2*sinA+sinj*cosA+5),
cosi=cos(i),
cosB=cos(B),
sinB=sin(B),
t=sini*cosj2*cosA-sinj* sinA;
int x=40+30*mess*(cosi*cosj2*cosB-t*sinB),
y= 12+15*mess*(cosi*cosj2*sinB +t*cosB),
o=x+80*y,
N=8*((sinj*sinA-sini*cosj*cosA)*cosB-sini*cosj*sinA-sinj*cosA-cosi *cosj*sinB);
if(22>y&&y>0&&x>0&&80>x&&mess>z[o]){
z[o]=mess;
b[o]=".,-~:;=!*#$@"[N>0?N:0];
}
}
}
printf("\x1b[d");
for(k=0; 1761>k; k++)
putchar(k%80?b[k]:10);
A+=0.04;
B+= 0.02;
}
}
@amkhrjee
Copy link

I tried gcc donut.c ./a.out and am getting the error : warning: return type defaults to 'int' [-Wimplicit-int] '.' is not recognized as an internal or extenal command, operable program or batch file.

@VolVox99
Copy link

VolVox99 commented Apr 2, 2021

I tried gcc donut.c ./a.out and am getting the error : warning: return type defaults to 'int' [-Wimplicit-int] '.' is not recognized as an internal or extenal command, operable program or batch file.

try
gcc donut.c -o donut && .\donut

@connorcpu
Copy link

connorcpu commented Apr 3, 2021

I tried gcc donut.c ./a.out and am getting the error : warning: return type defaults to 'int' [-Wimplicit-int] '.' is not recognized as an internal or extenal command, operable program or batch file.

The error says you command to compile is wrong do a quick Google search on how to compile c and I think GCC is for c++ or try gcc donut.c

Copy link

ghost commented Apr 5, 2021

Hey, why is it, like, not staying in one place? There's always a new doughnut and another and another etc?

same bro

Copy link

ghost commented Apr 5, 2021

i get the donut and it spins but always in a new line (like the problems discriber by others) but i cant fix it but i did get it in exe format

same problem

@vulnoryx
Copy link

vulnoryx commented Apr 9, 2021

replace printf("\x1b[2J"); with system("cls"); and include the headers:
#include <stdio.h>
#include <string.h>
#include <math.h>
to get a smooth rotation without the donut cloning itself

@mohamdhashim
Copy link

How can I increase the rotation speed of the donut?
to change rotation speed just decrease or increase the increment of A & B in the last 2 lines of code

Copy link

ghost commented Apr 12, 2021

How can I hide the cursor flashing when the donut spins?

@Kushalr3ddy
Copy link

Hey, why is it, like, not staying in one place? There's always a new doughnut and another and another etc?

try changing the console window size

@GustavoSchip
Copy link

in windows this donut spins way too slow

@mohamdhashim
Copy link

in windows this donut spins way too slow

to change rotation speed just decrease or increase the increment of A & B in the last 2 lines of code

@MishkatHossain
Copy link

how, am I suppose to run it in code block??
Its giving an infinite loop and does not stay in the frame;
what should I do?

I used all these header file;
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <unistd.h>

@serhatdog
Copy link

how, am I suppose to run it in code block??
Its giving an infinite loop and does not stay in the frame;
what should I do?

I used all these header file;
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <unistd.h>

replace printf("\x1b[2J"); with system("cls");

@Keksoj
Copy link

Keksoj commented Dec 18, 2021

Hi guys,

The headers should probably be present in the code with comments to explain wether they are necessary or not.

I had this issue:

➤ gcc donut.c
/usr/bin/ld: /tmp/ccvhXcuq.o: in function `main':
donut.c:(.text+0xb1): undefined reference to `sin'
/usr/bin/ld: donut.c:(.text+0xd8): undefined reference to `cos'
/usr/bin/ld: donut.c:(.text+0xff): undefined reference to `sin'
/usr/bin/ld: donut.c:(.text+0x126): undefined reference to `sin'
/usr/bin/ld: donut.c:(.text+0x14d): undefined reference to `cos'
/usr/bin/ld: donut.c:(.text+0x1df): undefined reference to `cos'
/usr/bin/ld: donut.c:(.text+0x206): undefined reference to `cos'
/usr/bin/ld: donut.c:(.text+0x22d): undefined reference to `
collect2: error: ld returned 1 exit status

solved here on Stack Overflow with doing:

gcc donut.c -lm

and now it works.

I now you guys are proficient in C, but please think of the noobs like me who can't have their donuts for lack of knowledge and frustration.

@sugamkarki
Copy link

@Keksoj thanks man!

@aliquazi1009
Copy link

@Kareem-negm You can write in python like this, n if n>0 else 0

@0FFSTYLE
Copy link

0FFSTYLE commented Mar 5, 2022

#include<stdio.h>
#include<string.h>
int k;
double sin() ,cos();
int main(){
float A=0, B=0, i, j, z[1760];
char b[1760];
printf("\x1b[2J");
for(; ; ) {
memset(b,32,1760);
memset(z,0,7040);
for(j=0; 6.28>j; j+=0.07) {
for(i=0; 6.28 >i; i+=0.02) {
float sini=sin(i),
cosj=cos(j),
sinA=sin(A),
sinj=sin(j),
cosA=cos(A),
cosj2=cosj+2,
mess=1/(sinicosj2sinA+sinjcosA+5),
cosi=cos(i),
cosB=cos(B),
sinB=sin(B),
t=sini
cosj2cosA-sinj sinA;
int x=40+30mess(cosicosj2cosB-tsinB),
y= 12+15
mess*(cosicosj2sinB +tcosB),
o=x+80
y,
N=8*((sinjsinA-sinicosjcosA)cosB-sinicosjsinA-sinjcosA-cosi cosjsinB);
if(22>y&&y>0&&x>0&&80>x&&mess>z[o]){
z[o]=mess;
b[o]=".,-~:;=!
#$@"[N>0?N:0];
}
}
}
printf("\x1b[d");
for(k=0; 1761>k; k++)
putchar(k%80?b[k]:10);
A+=0.04;
B+= 0.02;
}
}

//'gcc -o dount donut.c -lm'
// '/ .dount'

//enjoy

@sujal-luhar
Copy link

int x=40+30mess(cosicosj2cosB-tsinB),
y= 12+15
mess*(cosicosj2sinB +tcosB),
o=x+80
y,

I can't understand here what is the meaning of magic numbers: 30, 15 & 80?
can anyone explain me plz!!!

@Ekk-0
Copy link

Ekk-0 commented Mar 9, 2022

You have to change the A and B's values at the end of the code:
A+=0.002;
B+= 0.001;
This worked for me.

@Solar-Stacer
Copy link

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>

int k;
double sin(), cos();
int main()
{
float A = 0, B = 0, i, j, z[1760];
char b[1760];
system("cls");
for (;;)
{
memset(b, 32, 1760);
memset(z, 0, 7040);
for (j = 0; 6.28 > j; j += 0.07)
{
for (i = 0; 6.28 > i; i += 0.02)
{
float sini = sin(i),
cosj = cos(j),
sinA = sin(A),
sinj = sin(j),
cosA = cos(A),
cosj2 = cosj + 2,
mess = 1 / (sini * cosj2 * sinA + sinj * cosA + 5),
cosi = cos(i),
cosB = cos(B),
sinB = sin(B),
t = sini * cosj2 * cosA - sinj * sinA;
int x = 40 + 30 * mess * (cosi * cosj2 * cosB - t * sinB),
y = 12 + 15 * mess * (cosi * cosj2 * sinB + t * cosB),
o = x + 80 * y,
N = 8 * ((sinj * sinA - sini * cosj * cosA) * cosB - sini * cosj * sinA - sinj * cosA - cosi * cosj * sinB);
if (22 > y && y > 0 && x > 0 && 80 > x && mess > z[o])
{
z[o] = mess;
b[o] = ".,-~:;=!*#$@"[N > 0 ? N : 0];
}
}
}
printf("\x1b[d");
for (k = 0; 1761 > k; k++)
putchar(k % 80 ? b[k] : 10);
A += 0.08;
B += 0.06;
}
}

This code is what worked for me and made the spin a little bit faster

@gem-ai
Copy link

gem-ai commented Aug 7, 2022

How can i change the FOV and the distance to the viewer of the donut?
and somehow usleep nor changing the A B in 36,37 slow the spin for me, but decreasing i+= and j+= in 14,15 did it for me.

@serhatdog
Copy link

How can written [N > 0 ? N : 0]; with python

[N if N > 0 else 0]
or
[0, N][N > 0]

@Rudxain
Copy link

Rudxain commented Sep 6, 2022

@ZakariaElk19
Copy link

thank you so much it did finaly work

@SWATcomi
Copy link

How can I make it spin slower

@youcantseeken
Copy link

./donut : The term './donut' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:2 char:1

  • ./donut
  •   + CategoryInfo          : ObjectNotFound: (./donut:String) [], CommandNotFoundException
      + FullyQualifiedErrorId : CommandNotFoundException
    

what happen with dis?

@Rudxain
Copy link

Rudxain commented Dec 25, 2022

@youcantseeken it seems you haven't compiled "donut.c", or the compiled .exe isn't located in the same working-directory as the terminal

@hirendhola
Copy link

**
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <unistd.h>

int main() {
float A = 0, B = 0;
float i, j;
int k;
float z[1760];
char b[1760];
printf("\x1b[2J");
for (;;) {
memset(b, 32, 1760);
memset(z, 0, 7040);
for (j = 0; j < 6.28; j += 0.07) {
for (i = 0; i < 6.28; i += 0.02) {
float c = sin(i);
float d = cos(j);
float e = sin(A);
float f = sin(j);
float g = cos(A);
float h = d + 2;
float D = 1 / (c * h * e + f * g + 5);
float l = cos(i);
float m = cos(B);
float n = sin(B);
float t = c * h * g - f * e;
int x = 40 + 30 * D * (l * h * m - t * n);
int y = 12 + 15 * D * (l * h * n + t * m);
int o = x + 80 * y;
int N = 8 * ((f * e - c * d * g) * m - c * d * e - f * g - l * d * n);
if (22 > y && y > 0 && x > 0 && 80 > x && D > z[o]) {
z[o] = D;
b[o] = ".,-~:;=!*#$@"[N > 0 ? N : 0];
}
}
}
printf("\x1b[H");
for (k = 0; k < 1761; k++) {
putchar(k % 80 ? b[k] : 10);
A += 0.00004;
B += 0.00002;
}
usleep(30000);
}
return 0;
}

**

@ahnaf12c
Copy link

My code runs, but thereseems to be a flickering issue.

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <unistd.h>

int k;
double sin(), cos();
int main()
{
float A = 0, B = 0, i, j, z[1760];
char b[1760];
printf("\x1b[2J");
for (;;)
{
memset(b, 32, 1760);
memset(z, 0, 7040);
for (j = 0; 6.28 > j; j += 0.07)
{
for (i = 0; 6.28 > i; i += 0.02)
{
float sini = sin(i),
cosj = cos(j),
sinA = sin(A),
sinj = sin(j),
cosA = cos(A),
cosj2 = cosj + 2,
mess = 1 / (sini * cosj2 * sinA + sinj * cosA + 5),
cosi = cos(i),
cosB = cos(B),
sinB = sin(B),
t = sini * cosj2 * cosA - sinj * sinA;
int x = 40 + 30 * mess * (cosi * cosj2 * cosB - t * sinB),
y = 12 + 15 * mess * (cosi * cosj2 * sinB + t * cosB),
o = x + 80 * y,
N = 8 * ((sinj * sinA - sini * cosj * cosA) * cosB - sini * cosj * sinA - sinj * cosA - cosi * cosj * sinB);
if (22 > y && y > 0 && x > 0 && 80 > x && mess > z[o])
{
z[o] = mess;
b[o] = ".,-~:;=!*#$@"[N > 0 ? N : 0];
}
}
}
system("cls");
for (k = 0; 1761 > k; k++)
putchar(k % 80 ? b[k] : 10);
A += 0.08;
B += 0.03;
}
}

@brunocrt
Copy link

brunocrt commented Jan 10, 2024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment