From b19ea4b759391dcbe911f4da4b9df2c8d468907b Mon Sep 17 00:00:00 2001 From: Arkaprabha Chakraborty Date: Wed, 5 Jan 2022 22:58:39 +0530 Subject: [PATCH] Initial commit --- .gitignore | 2 + LICENSE | 21 +++++++ Makefile | 15 +++++ README.md | 23 ++++++++ blob/screenshot.png | Bin 0 -> 94410 bytes doughnut.c | 135 ++++++++++++++++++++++++++++++++++++++++++++ doughnut.py | 119 ++++++++++++++++++++++++++++++++++++++ 7 files changed, 315 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100755 Makefile create mode 100755 README.md create mode 100644 blob/screenshot.png create mode 100644 doughnut.c create mode 100644 doughnut.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9abc54b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +# Executables +*.out diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f1c8967 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Arkaprabha Chakraborty + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100755 index 0000000..12602e0 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +deb: + @sudo apt install gcc python3 + +arch: + @sudo pacman -S gcc python3 + +c: doughnut.c + @gcc -o doughnut.out doughnut.c -lm + @./doughnut.out + +py: doughnut.py + @python3 doughnut.py + +clean: doughnut.out + @rm doughnut.out diff --git a/README.md b/README.md new file mode 100755 index 0000000..dff8c6a --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Description +These programs print a spinning ASCII torus (mathematical name for a doughnut-shaped object) on the terminal. Original post by Andy Sloane can be found [here](https://www.a1k0n.net/2011/07/20/donut-math.html). + +# For Linux +## Prerequisites for Debian based distros +* `sudo apt install make` to install Make +* `make deb` to install the required compilers +## Prerequisites for Arch based distros +* `sudo pacman -S make` to install Make +* `make arch` to install the required compilers + +## How to run? +* Clone or download the repository +* Open a terminal inside the project directory +* Complete the prerequisites for your OS +* `make c` to run the C version +* `make py` to run the Python version + +## How to clean up the executable? +* `make clean` to delete the executable + +# Screenshot +![screenshot](https://github.com/arkorty/Spinning-ASCII-Torus/blob/main/blob/screenshot.png) diff --git a/blob/screenshot.png b/blob/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..4fb23456b3b234bb4edcff428149fb60105d8fc5 GIT binary patch literal 94410 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/z(6U8>C~qQzm8k=l4Y4!9-=?xm|N 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 literal 0 HcmV?d00001 diff --git a/doughnut.c b/doughnut.c new file mode 100644 index 0000000..47e522e --- /dev/null +++ b/doughnut.c @@ -0,0 +1,135 @@ +#include +#include +#include +#include +#include +#include + +#define clear_terminal() printf("\e[1;1H\e[2J"); // Clears the terminal + +// Function allocates memory for the frame buffer +char **allocate_memory(int size) { + char **array = malloc(size * sizeof(char *)); + + for (int i = 0; i < size; i++) + array[i] = malloc(size * sizeof(char)); + + return array; +} + +// Function gets the size of the terminal +int get_terminal_size() { + struct winsize w; + ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); + + int win_row_size = (int)w.ws_row; + int win_col_size = (int)w.ws_col; + + if (win_row_size < win_col_size) + return win_row_size; + else + return win_col_size; +} + +// Function dumps the frame into the terminal +void dump_frame(char **frame, int size) { + for (int i = 0; i < size; i++) + printf("%s\n", frame[i]); +} + +// Function builds the frame and returns the frame buffer +char **build_frame(char **frame, int frame_num, int size, int K) { + float x = frame_num * 0.0093; // Rotational speed around the x axis + float y = frame_num * 0.0048; // Rotational speed around the y axis + + float cos_x = cos(x), sin_x = sin(x); // Precomputing sines and cosines of x + float cos_y = cos(y), sin_y = sin(y); // Precomputing sines and cosines of y + + float z_buffer[size][size]; // Declaring buffer for storing z coordinates + + // Initializing frame buffer and z buffer + for (int i = 0; i < size; i++) + for (int j = 0; j < size; j++) { + frame[i][j] = ' '; + z_buffer[i][j] = 0; + } + + // Loop uses theta to revolve a point around the center of the circle + // 6.283186 = 2 * Pi = 360° + for (float theta = 0; theta < 6.283186; theta += 0.031) { + // Precomputing sines and cosines of theta + float cos_theta = cos(theta), sin_theta = sin(theta); + + // Loop uses phi to revolve the circle around the center of the torus + for (float phi = 0; phi < 6.283186; phi += 0.016) { + // Precomputing sines and cosines of phi + float cos_phi = cos(phi), sin_phi = sin(phi); + + // Calculating the x and y coordinates of the circle before the + // revolution + float circle_x = 2 + 1 * cos_theta, circle_y = 1 * sin_theta; + + // Calculating the x and y coordinates after the revolution + float x = circle_x * (cos_y * cos_phi + sin_x * sin_y * sin_phi) - + circle_y * cos_x * sin_y; + float y = circle_x * (sin_y * cos_phi - sin_x * cos_y * sin_phi) + + circle_y * cos_x * cos_y; + + // Calculating z + float z = 5 + cos_x * circle_x * sin_phi + circle_y * sin_x; + + // Calculating the inverse of z + float z_inv = 1 / z; + + // Calculating x and y coordinates of the 2D projection + int x_proj = size / 2 + K * z_inv * x; + int y_proj = size / 2 - K * z_inv * y; + + // Calculating luminous intensity + float lumi_int = + cos_phi * cos_theta * sin_y - cos_x * cos_theta * sin_phi - + sin_x * sin_theta + + cos_y * (cos_x * sin_theta - cos_theta * sin_x * sin_phi); + + /* Checking if surface is pointing away from the point of view + * Also checking if the point is closer than any other point + * previously plotted + */ + if (lumi_int > 0 && z_inv > z_buffer[x_proj][y_proj]) { + z_buffer[x_proj][y_proj] = z_inv; + + // Bringing the value of luminance between 0 to 11 + int lumi_idx = lumi_int * 8; + + /* Storing an appropriate character that represents the correct + * amount of luminance + */ + frame[x_proj][y_proj] = ".,-~:;=!*#$@"[lumi_idx]; + } + } + } + + // Returning the frame buffer + return frame; +} + +int main() { + // Getting the size of the terminal + const int size = get_terminal_size(); + + // Allocating memory to the frame buffer + char **frame = allocate_memory(size); + + // Loop rotates the torus around both the axes + for (int frame_num = 0; true; frame_num++) { + + // Building and dumping the frame into the terminal + int konst = size * 5 * 3 / (8 * (1 + 2)); + dump_frame(build_frame(frame, frame_num, size, konst), size); + + // Clears the screen + clear_terminal(); + } + + return 0; +} diff --git a/doughnut.py b/doughnut.py new file mode 100644 index 0000000..8825d4f --- /dev/null +++ b/doughnut.py @@ -0,0 +1,119 @@ +from os import name, system, get_terminal_size +from math import sin, cos, pi + + +# Screen dimensions +screen_width = screen_height = ( + get_terminal_size().lines + if get_terminal_size().lines < get_terminal_size().columns + else get_terminal_size().columns +) + +# Jump values for theta and phi +theta_jump = 0.07 +phi_jump = 0.02 + +R1 = 1 +R2 = 2 +K2 = 5 + +# Calculate K1 based on screen size: The maximum x-distance occurs roughly at +# the edge of the torus, which is at x=R1+R2, z=0. we want that to be +# displaced 3/8ths of the width of the screen, which is 3/4th of the way from +# the center to the side of the screen. We also substract 2 from the +# screen_width to introduce a border. +# screen_width-2*K2*3/(8*(R1+R2)) = K1 +K1 = (screen_width - 2) * K2 * 3 / (8 * (R1 + R2)) + + +def render_frame(A, B): + + # Precomputing sines an cosines + cosA = cos(A) + sinA = sin(A) + cosB = cos(B) + sinB = sin(B) + + # Creating 2D arrays + output = [] + zbuffer = [] + + # Initializing 2D arrays + for i in range(screen_height): + output.append([" "] * (screen_width)) + zbuffer.append([0] * (screen_width)) + + # Value of theta increases until it completes a rotation around the + # cross-sectional circle of the torus + theta = 0 + while theta < 2 * pi: + + # Precomputing sines and cosines of theta + costheta = cos(theta) + sintheta = sin(theta) + + # Value of phi increases until the circle completes a revolution around + # the center of the torus + phi = 0 + while phi < 2 * pi: + + # Precomputing sines and cosines of phi + cosphi = cos(phi) + sinphi = sin(phi) + + # (x, y) coordinates of the circle before revolution + circlex = R2 + R1 * costheta + circley = R1 * sintheta + + # Final 3D coordinates after revolution + x = circlex * (cosB * cosphi + sinA * sinB * sinphi) - circley * cosA * sinB + y = circlex * (sinB * cosphi - sinA * cosB * sinphi) + circley * cosA * cosB + z = K2 + cosA * circlex * sinphi + circley * sinA + + # Inverse of z + zinv = 1 / z + + # (x, y) coordinates of the 2D projection + xp = int(screen_width / 2 + K1 * zinv * x) + yp = int(screen_height / 2 - K1 * zinv * y) + + # Calculating luminance + L = cosphi * costheta * sinB - cosA * costheta * sinphi - sinA * sintheta + +cosB * (cosA * sintheta - costheta * sinA * sinphi) + + # L ranges from -sqrt(2) to +sqrt(2). If it's < 0, the surface + # is pointing away from us, so we won't bother trying to plot it. + if L > 0 and zinv > zbuffer[xp][yp]: + + # Test against the z-buffer. Larger 1/z means that the pixel is + # closer to the viewer than what's already plotted. + + zbuffer[xp][yp] = zinv + luminance_index = int(L * 8) + + # Now the luminance_index is in the range 0..11 (8*sqrt(2) + # = 11.3) now we lookup the character corresponding to the + # luminance and plot it in our output. + output[xp][yp] = ".,-~:;=!*#$@"[luminance_index] + + phi += phi_jump + + theta += theta_jump + + # Clearing old frame and printing new frame + system("cls") if name is "nt" else system("clear") + for i in range(screen_width): + for j in range(screen_height): + print(output[i][j], end="") + print() + + +if __name__ == "__main__": + A = 0 + B = 0 + + # Calling render_frame() n times + while True: + render_frame(A, B) + A += 0.07 + B += 0.03