From 31cb865876bb42d9a693a4b86d6c6479a297bb95 Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Fri, 9 Jan 2026 19:41:49 -0800 Subject: [PATCH] rewrite stuff + extra rotation --- app | Bin 21152 -> 21328 bytes main.c | 110 +++++++++++++++++++++++++++++++++------------------------ main.o | Bin 11824 -> 11936 bytes 3 files changed, 63 insertions(+), 47 deletions(-) diff --git a/app b/app index 08b0260950b79a1c73d4e878ef152c9b64cdbbf1..6ebce63f4a217115cadbc7c256126c61620ad680 100755 GIT binary patch literal 21328 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 diff --git a/main.c b/main.c index 8d27e74..ce7c92b 100644 --- a/main.c +++ b/main.c @@ -1,3 +1,4 @@ +#include #ifndef M_PI #define M_PI 3.141592653589793238462643383279502884 /* pi */ #endif @@ -37,34 +38,41 @@ VEC2 project(VEC3 v) }; } -VEC2 toScreenCoord(VEC2 v) +void toScreenCoord(VEC2 *v) { // -1..1 -> 0..2 -> 0..1 -> 0..WINDOW_W/H - - return (VEC2) { - x: (v.x + 1) / 2 * WINDOW_W, - y: (1 - (v.y + 1) / 2) * WINDOW_H, - }; + v->x = (v->x + 1) / 2 * WINDOW_W; + v->y = (1 - (v->y + 1) / 2) * WINDOW_H; } -VEC3 rotate(VEC3 v, double angle) +void rotate_x(VEC3 *v, double angle) { - return (VEC3) { - x: v.x * cos(angle) - v.z * sin(angle), - // y: v.x * sin(angle) + v.y * cos(angle), - // z: v.z, - y: v.y, - z: v.x * sin(angle) + v.z * cos(angle), - }; + float y = v->y; + float z = v->z; + v->y = y * cos(angle) - z * sin(angle); + v->z = y * sin(angle) + z * cos(angle); } -VEC3 translate_z(VEC3 v) +void rotate_y(VEC3 *v, double angle) { - return (VEC3) { - v.x, - v.y, - v.z + 1, - }; + float x = v->x; + float z = v->z; + v->x = x * cos(angle) - z * sin(angle); + v->z = x * sin(angle) + z * cos(angle); +} + +void rotate_z(VEC3 *v, double angle) +{ + float x = v->x; + float y = v->y; + v->x = x * cos(angle) - y * sin(angle); + v->y = x * sin(angle) + y * cos(angle); +} + + +void translate_z(VEC3 *v) +{ + v->z = v->z + 1; } void draw_point(SDL_Renderer *renderer, VEC2 v) @@ -215,7 +223,7 @@ int main(void) int slices = 20; float r = 0.175; - VEC3 sphere[(stacks) * (slices)]; + VEC3 sphere_vectors_3d[(stacks) * (slices)]; for (int i = 0; i < stacks; i++) { // Phi (angle of latitude, ranges from 0 to PI) @@ -231,7 +239,7 @@ int main(void) // Convert spherical coordinates to Cartesian (x, y, z) // The choice of axis mapping may vary. Here Y is vertical. - sphere[i * stacks + j] = (VEC3){ + sphere_vectors_3d[i * stacks + j] = (VEC3){ x: r * cosTheta * sinPhi, y: r * cosPhi, z: r * sinTheta * sinPhi, @@ -239,7 +247,7 @@ int main(void) } } - size_t num_points = sizeof(sphere) / sizeof(sphere[0]); + size_t num_sphere_vectors = sizeof(sphere_vectors_3d) / sizeof(sphere_vectors_3d[0]); // CUBE VEC3 vertecies[8] = { @@ -254,7 +262,7 @@ int main(void) {x: 0.3, y: -0.3, z: -0.3}, }; - int faces[6][4] = { + int faces[4][4] = { {0, 1, 2, 3}, // front {4, 5, 6, 7}, // back {0, 1, 5, 4}, // top @@ -308,42 +316,50 @@ int main(void) // draw_circle(renderer, (VEC2){WINDOW_W/2, WINDOW_H/2}, 150); // draw_2d_ellipse(renderer, WINDOW_W/2, WINDOW_H/2, 150, 150); - VEC2 ellipse[num_points]; + VEC2 ellipse[num_sphere_vectors]; - for (size_t i = 0; i < num_points; i++) + for (size_t i = 0; i < num_sphere_vectors; i++) { - VEC3 v = sphere[i]; - v = rotate(v, angle); - v = translate_z(v); - // v.y = v.y - 0.125; - VEC2 v2 = project(v); - v2 = toScreenCoord(v2); - ellipse[i] = v2; + VEC3 vec3d = sphere_vectors_3d[i]; + + rotate_y(&vec3d, angle); + rotate_x(&vec3d, angle); + rotate_z(&vec3d, angle); + translate_z(&vec3d); + + VEC2 vec2d = project(vec3d); + toScreenCoord(&vec2d); + + ellipse[i] = vec2d; } - draw_ellipse_points(renderer, ellipse, num_points); + draw_ellipse_points(renderer, ellipse, num_sphere_vectors); // Draw faces of cube // SDL_RenderDrawLine(renderer, x1, y1, x2, y2) - for (int i = 0; i < 6; i++) + for (size_t i = 0; i < sizeof(faces) / sizeof(faces[0]); i++) { - for (int j = 0; j < 4; j++) + for (size_t j = 0; j < sizeof(faces[0]) / sizeof(faces[0][0]); j++) { - VEC3 ao = vertecies[faces[i][j]]; - VEC3 bo = vertecies[faces[i][(j + 1) % 4]]; + VEC3 vec3A = vertecies[faces[i][j]]; + VEC3 vec3B = vertecies[faces[i][(j + 1) % 4]]; - ao = rotate(ao, -angle); - bo = rotate(bo, -angle); + rotate_y(&vec3A, -angle); + rotate_y(&vec3B, -angle); + rotate_x(&vec3A, -angle); + rotate_x(&vec3B, -angle); + // rotate_z(&vec3A, -angle); + // rotate_z(&vec3B, -angle); - ao = translate_z(ao); - bo = translate_z(bo); + translate_z(&vec3A); + translate_z(&vec3B); - VEC2 a = project(ao); - VEC2 b = project(bo); + VEC2 vec2A = project(vec3A); + VEC2 vec2B = project(vec3B); - a = toScreenCoord(a); - b = toScreenCoord(b); + toScreenCoord(&vec2A); + toScreenCoord(&vec2B); - SDL_RenderDrawLine(renderer, a.x, a.y, b.x, b.y); + SDL_RenderDrawLine(renderer, vec2A.x, vec2A.y, vec2B.x, vec2B.y); } } diff --git a/main.o b/main.o index f7066cdf17b1a40c5aa0394db5ece313221f4f37..3cda83987d175ddb66592aeee3e589e4b7181653 100644 GIT binary patch literal 11936 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 literal 11824 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