-
-
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; | |
} | |
} |
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
.
in windows this donut spins way too slow