From 47ad4e47bcc7c6103e5d028248666a711e8427ee Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Fri, 9 Jan 2026 13:56:23 -0800 Subject: [PATCH] add small sphere thats broken inside cube --- app | Bin 16736 -> 21152 bytes main.c | 179 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- main.o | Bin 6736 -> 11824 bytes 3 files changed, 165 insertions(+), 14 deletions(-) diff --git a/app b/app index d930f05f51b999179f39df60556ea808fac4e532..08b0260950b79a1c73d4e878ef152c9b64cdbbf1 100755 GIT binary patch literal 21152 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 literal 16736 zcmeHOeQ;dWb-ycHAcO5)ft?sb>ph9VQ9u>Jj897)YB$ZW`L~iVA+(Uf;7ZQn^y4vvl|RC7PxBSu>GBT z&)I!?Xqhz4f7R9Ko%{Qpk9*&J_uc#M+xs32ty@#!@hC|X)Gdn8wkr%1WW|A-I0F$> z%hePdXRBH265xrNGy0$r(3*6*VzjJcegY)<&7jN}@)|=cky1mFpPxvlAGOVlTH`lk#b`Ogeu~du{D>yM8uqJUKaoE6 z6DjRUZ9@OcIi6cCfR2(#w_h9kxn;d^QzEGhN}J!xME;QSHnLxrUx!g{*=T4bQp)=R z{HR@i-z1lL6PH)+I^?)LMbh=AG(R3|UbbX@JW?BvB|3N2?pnUAcG;3ZIvH4`^;9oE z{;5x`y{$P(r|?fUrac~_3-2e6(qQyQ?e{+TpNYq%p3GN5iJ9 zQu*s*iKsSNm)x!;ifoLv+?&?G)Sd&iB-1J#OQ0dp1}*p6Ep7MOt>IW41jdaPZkhJ5 zHfh-vwp(L~a6Gmrs-Q+&EUH};SU`ix0wUTew~TTvCbxE7!|FPFQDBLZ+~QJpQD7-9 zk*D}q!MTY=rjm0;GXaR~C#W z&PY^VjCF*KzM`m?`Az1P;FV;hl%MA>;T7{$L9JH83qHNl@HDo`m`2QygXbw;8|ECm z^Zq>N;Az~IG~(d7%WKs}=BfMhDQkXl>VfsO9z&rb4G%7k^--_K}tiH+=iJL|;)6q3=p**_gq{5JQ zb{E+lX9@cTZNGFiiR(YIdd^u#-&<)N9hqQxPFSyfl$nMAQ#e3XVaQx3@u&XVwW1Pg z)pA-E7p-xRZpU7;Eq{G&-inHx`5TI)io)ZK6}>e&^N5FvX$`?#7KEe1d#?LX{#`qb=G&<4wJ;}I@@n15IGv2|tgYg#`XBcl~yo>RzjPGN7 zv%#S*D(rd&4-@b+c$C1E3?8%kn)c}qa0EjLdd*LVt#1#6zD7N5Ahe$z69z(0(bK^| z=m7P(fzUyE78nQ}qFyl&dX{GXfzWr2L%-3zU@Wu7{RhVVq_KRJ{Bk$`ccIYJ{S+?x zK=*zebGz zUX{N>)iLNDMZS;vD~1^4P2WW?r+Z;le*v{ULhm!4r^8Ehpjz)hW!Z+{pOzrIkl*v) zA(yAvr4BX&-3JgAgv!U!ngiVj1vUWoYH026{W@7$Ew5vcudqCWz4hJutQO2jgO(=? zj5!K)&Z-@x(7isZ=j*58&>O7k=^mntj?=f%(=&KK4E}#e>^CL$ zS!B>y`sT*TQ<-S~dw(&!2@0byVfcuUG5l5&qaP|_iS0N0 z=cH9#XLD2;T?_qu1Kz(=|CplHE=`Jm+tE6TuHRw@F)P#~e+&Nc5V;3=r8b5(HU9Rq zlY*YBC;V9>FdmfDfnOI2k3we86$*zT2O&>F4!vI}bU>auUnmSgE*-|`fGPZ^kbcOs z7z2Wkt8vS3gQP?=BPGwCP0F*&=ec_FrB(Z&BcApYv?1nPGN`|lR`cpQ{4c@34|SlJ zYN~I|)ET#WFW*_!rB=?o>2r&(yB4hWzYDSob<>VSB2nB7Wr*iG5Tvpm!~ZW)UYv-~ zRNo^NbyF^>XhDsP{#nqqIJc)q>7OX-Uj_g7&`+nh;y+=shYTqGS^OVFTigy=)K{!8 z`cH=6&!N}9?G^o}U8)VpXFQF!z<3Lcx4?J{jJLpe3yinGcngfT!2k0Wko`-tUr8S6 zw{S) z`m_xg)9W1+8?qhj? zH&#uW|5S0GqR}dKA2L*KaU5X9quPFY@xB%NZy_^Q{mY#fy^HtITLb-8L82HrR-6~K z>dNANdGYucWIVY0-2L&i=4TY|U$K7=8CR1T6&hqL{>n1^b!GV4GW^Oi{08tojD~Vu zq@K5zvEP9k-cO@vP%Mq4arg>Eit|9G--STc3BH=n%x~=Iw>&ntxv zL5G&+75T_ zQZ32$j(9W^jbKmtm=?4LJ!Xefsqk(a`{Yx*Rck8T9TEMa%1qY-DVj1#_2ux;nI{ZVD`w*E*uX}5(F5qu9p6)b&{pc@(iTwekd zV_+{oIgI+CL4PFCkxG6s+T#4Cq4b$T@mqvU5S=9 z4ZdDfDt+64?tw-!A1R>45~c;l_!h&qo6~8r`-Ja7@Hs@WV7dyaWCjh5a(>UxL{uQX zyFC+bhRmdlY?E9pfv-Lh$?Vy@FWB5=j7GY}D>V{gnk+gYR zINhcKk=+RtVPqy{G&`cHbS#+|1#IY2(Ri2~IM)%+r~us%Du8TYdy+HhXp0JDqPqa; z&VqGP_q{;0jqjzl2%-rxG0aV6JS2~z!tF5xGwx_|6~NuxP9L-UpA)SsFoob*#w7Rm zma?v3wYHT!$v?qAJyMH*x$g?emXbWb8>G}SWSsu)?+fX77iW_BSvY!bbNb73qe#CP zvUL030saEk0#bijFNv&SKUpui>mP=m)=J_p>nV{zR!|+OoyA|)H8F7Xs4M=mJ`*YH zF_`E?F`Vfy0BEfv{<6LixqywO{$eNc0qAM%Bv{r@BDb->w6WBmY1M}ewW;{adQN1P z4W)eXm-GKC_Fv6*vOW|k>q+t_AGiPCfTK2%_{HZ4ex8tZGfZ@HU;n4TI{p3ZSCp;> zm&X*5-*Wi}d3_~P>`dvU#~k4gyZkq@zewkAg%m^lMABYMXZ__lP2_{JuqS6E@iR!N z?<3>%m*-BA@?Jvh-R<`>`^)uLezs)U#ZZJ?KfymlhRPTJF2B);Y&5WVbeI2c&^Y~1 z`;Do{d8BkCclmEYHx>W#9zfo=$oIf*d%+^#hp*S+FYjagwIGqi&Y%(&{&!GN-<9%Z zohILR%Xi##|4|Y@xsKlkN2e(M@;+wye6q&(R7Mn!;xF2`IQXjS)eV=>d^;DYLZ03#8N)&Kwi diff --git a/main.c b/main.c index 63d3e94..8d27e74 100644 --- a/main.c +++ b/main.c @@ -1,3 +1,6 @@ +#ifndef M_PI +#define M_PI 3.141592653589793238462643383279502884 /* pi */ +#endif #include #include #include @@ -48,7 +51,8 @@ VEC3 rotate(VEC3 v, double angle) { return (VEC3) { x: v.x * cos(angle) - v.z * sin(angle), - // y: v.y * cos(angle) - v.x * 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), }; @@ -63,6 +67,103 @@ VEC3 translate_z(VEC3 v) }; } +void draw_point(SDL_Renderer *renderer, VEC2 v) +{ + const float size = 2.0; + + SDL_Rect point_rect; + // Adjust x and y to center the point visually, if desired + point_rect.x = v.x - size / 2; + point_rect.y = v.y - size / 2; + point_rect.w = size; + point_rect.h = size; + + // Draw the filled rectangle + SDL_RenderFillRect(renderer, &point_rect); +} + +void draw_circle(SDL_Renderer *renderer, VEC2 v, float r) +{ + float x = r, y = 0.0; + + // Initialising the value of P + int P = 1 - r; + while (x > y) + { + y++; + + // Mid-point is inside or on the perimeter + if (P <= 0) + P = P + 2*y + 1; + + // Mid-point is outside the perimeter + else + { + x--; + P = P + 2*y - 2*x + 1; + } + + // All the perimeter points have already been printed + if (x < y) + break; + + // Printing the generated point and its reflection + // in the other octants after translation + draw_point(renderer, (VEC2){x + v.x, y + v.y}); + draw_point(renderer, (VEC2){-x + v.x, y + v.y}); + draw_point(renderer, (VEC2){x + v.x, -y + v.y}); + draw_point(renderer, (VEC2){-x + v.x, -y + v.y}); + + // If the generated point is on the line x = y then + // the perimeter points have already been printed + if (x != y) + { + draw_point(renderer, (VEC2){y + v.x, x + v.y}); + draw_point(renderer, (VEC2){-y + v.x, x + v.y}); + draw_point(renderer, (VEC2){y + v.x, -x + v.y}); + draw_point(renderer, (VEC2){-y + v.x, -x + v.y}); + } + } +} + +void draw_ellipse_points(SDL_Renderer *renderer, VEC2 *points, size_t num_points) +{ + for (size_t i = 0; i < num_points; ++i) + { + VEC2 a = points[i]; + VEC2 b = points[(i + (size_t) sqrt(num_points)) % num_points]; + + SDL_RenderDrawLine(renderer, a.x, a.y, b.x, b.y); + } +} + +void draw_2d_ellipse(SDL_Renderer *renderer, int x, int y, int rx, int ry) { + // Number of points to approximate the ellipse + const int num_points = 100; + VEC2 points[num_points]; + + for (int i = 0; i < num_points; ++i) + { + float angle = 2.0f * M_PI * i / num_points; + VEC2 p = (VEC2){ + x + (int)(rx * cosf(angle)), + y + (int)(ry * sinf(angle)), + }; + // printf("(%f, %f)\n" ,p.x, p.y); + // draw_point(renderer, p); + points[i] = p; + } + + draw_ellipse_points(renderer, points, num_points); + for (int i = 0; i < num_points; ++i) + { + VEC2 a = points[i]; + VEC2 b = points[(i + 1) % (num_points)]; + + SDL_RenderDrawLine(renderer, a.x, a.y, b.x, b.y); + } +} + int main(void) { if (SDL_Init(SDL_INIT_VIDEO) != 0) @@ -110,16 +211,47 @@ int main(void) double angle = 0; - VEC3 vertecies[8] = { - {x: 0.25, y: 0.25, z: 0.25}, - {x: -0.25, y: 0.25, z: 0.25}, - {x: -0.25, y: -0.25, z: 0.25}, - {x: 0.25, y: -0.25, z: 0.25}, + int stacks = 20; + int slices = 20; + float r = 0.175; - {x: 0.25, y: 0.25, z: -0.25}, - {x: -0.25, y: 0.25, z: -0.25}, - {x: -0.25, y: -0.25, z: -0.25}, - {x: 0.25, y: -0.25, z: -0.25}, + VEC3 sphere[(stacks) * (slices)]; + + for (int i = 0; i < stacks; i++) { + // Phi (angle of latitude, ranges from 0 to PI) + float phi = M_PI * (float)i / (float)stacks; + float sinPhi = sin(phi); + float cosPhi = cos(phi); + + for (int j = 0; j < slices; j++) { + // Theta (angle of longitude, ranges from 0 to 2*PI) + float theta = 2.f * M_PI * (float)j / (float)slices; + float sinTheta = sin(theta); + float cosTheta = cos(theta); + + // Convert spherical coordinates to Cartesian (x, y, z) + // The choice of axis mapping may vary. Here Y is vertical. + sphere[i * stacks + j] = (VEC3){ + x: r * cosTheta * sinPhi, + y: r * cosPhi, + z: r * sinTheta * sinPhi, + }; + } + } + + size_t num_points = sizeof(sphere) / sizeof(sphere[0]); + + // CUBE + VEC3 vertecies[8] = { + {x: 0.3, y: 0.3, z: 0.3}, + {x: -0.3, y: 0.3, z: 0.3}, + {x: -0.3, y: -0.3, z: 0.3}, + {x: 0.3, y: -0.3, z: 0.3}, + + {x: 0.3, y: 0.3, z: -0.3}, + {x: -0.3, y: 0.3, z: -0.3}, + {x: -0.3, y: -0.3, z: -0.3}, + {x: 0.3, y: -0.3, z: -0.3}, }; int faces[6][4] = { @@ -150,7 +282,7 @@ int main(void) delta = (now - last_time) / 1000.0f; // seconds last_time = now; - angle += 3.141592654 * delta; + angle += M_PI * delta * 0.5; // clear scren SDL_SetRenderDrawColor( @@ -172,7 +304,25 @@ int main(void) RAINDROP_A ); - // Draw faces + // draw sphere + // 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]; + + for (size_t i = 0; i < num_points; 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; + } + draw_ellipse_points(renderer, ellipse, num_points); + + // Draw faces of cube // SDL_RenderDrawLine(renderer, x1, y1, x2, y2) for (int i = 0; i < 6; i++) { @@ -181,8 +331,8 @@ int main(void) VEC3 ao = vertecies[faces[i][j]]; VEC3 bo = vertecies[faces[i][(j + 1) % 4]]; - ao = rotate(ao, angle); - bo = rotate(bo, angle); + ao = rotate(ao, -angle); + bo = rotate(bo, -angle); ao = translate_z(ao); bo = translate_z(bo); @@ -197,6 +347,7 @@ int main(void) } } + // draw vertecies of cube // for (int i = 0; i < sizeof(vertecies) / sizeof(vertecies[0]); i++) // { // VEC3 v3 = vertecies[i]; diff --git a/main.o b/main.o index 59c1d233f068a54b0c31e502f6dfba627fb69073..f7066cdf17b1a40c5aa0394db5ece313221f4f37 100644 GIT binary patch literal 11824 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