-
-
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; | |
} | |
} |
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
in windows this donut spins way too slow
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
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>
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");
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.
@Keksoj thanks man!
@Kareem-negm You can write in python like this, n if n>0 else 0
#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=sinicosj2cosA-sinj sinA;
int x=40+30mess(cosicosj2cosB-tsinB),
y= 12+15mess*(cosicosj2sinB +tcosB),
o=x+80y,
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
int x=40+30mess(cosicosj2cosB-tsinB),
y= 12+15mess*(cosicosj2sinB +tcosB),
o=x+80y,
I can't understand here what is the meaning of magic numbers: 30, 15 & 80?
can anyone explain me plz!!!
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.
#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
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.
How can written [N > 0 ? N : 0]; with python
[N if N > 0 else 0]
or
[0, N][N > 0]
For anyone interested:
Link to original blog post, by Andy Sloane
thank you so much it did finaly work
How can I make it spin slower
./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?
@youcantseeken it seems you haven't compiled "donut.c", or the compiled .exe isn't located in the same working-directory as the terminal
**
#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;
}
**
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;
}
}
in windows this donut spins way too slow
use clang
compiler it's a little better than gcc
or zig cc
.
How can I hide the cursor flashing when the donut spins?