From 9eea8ed5e0a5f163543da9779e3bc37ed964184c Mon Sep 17 00:00:00 2001 From: SowinskiBraeden Date: Thu, 22 Jan 2026 12:33:26 -0800 Subject: [PATCH] finish cube + sphere animation --- tinker/cube | Bin 89671 -> 217526 bytes tinker/cube.ml | 109 +++++++++++++++++++++++----------------------- tinker/output.txt | 0 tinker/proper.txt | 6 --- tinker/sphere.ml | 53 ---------------------- tinker/test.c | 32 -------------- tinker/tinker.ml | 66 ++++++++++++++++++++-------- 7 files changed, 103 insertions(+), 163 deletions(-) delete mode 100644 tinker/output.txt delete mode 100644 tinker/proper.txt delete mode 100644 tinker/sphere.ml diff --git a/tinker/cube b/tinker/cube index a8c9e6b50d625399aa9e92f58f57a79694f57dfd..33efe4e42959d4f2f768b978067670b4893ebab5 100755 GIT binary patch literal 217526 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 H|KR@uz*eY^ delta 2711 zcmZ`)4^WiX5r6xh{5d@+C<5^qP_UwnrT%LSlE9rOD3M4NCv7?r28dP+s0B2Vs3dJ| zOEr|_#jM6EAgPUwM$FlKO^jwb(^zL(t!7da?9_A`sWEcJ7MiRH|l@K+IL@xw{LaM;#2)PE-=Mjc2R{r-kcK1-2DO3DjVH= zh@KGQ5LMdMEk~(Jep77K`-yhb-(&2lSKWb4trLk>+s1Qg_PxE^Xbn!=?t`LeyFZH7 z^63NQv1i+#u~)am1(qM4{AH>RG@hGJRAX1KNwD1?o}^ma*pX&CKH5m@>?0ksX}vs` z(37^OBa1f3Z$iL#{>2EY3%uNU$%H+nlycj*yHego%f~`)^$GTtZM#ca7n@-k0RnDkS^b(>vF7DJ>x=Hb_PT`+d ze6&-i>K7D$jAyHyV5bfz{i5RLOL`9bF6syLcE$A<^&5QEc*ekduxKHr1V3fcszyh~RfCS|RuXXEe{WD3hTaTNwTR7Mj3wDrFkBA&E z__|<^;C5Z^kgi#APLF#HI1|UY%5rU}1tZ!7@RQWS$}tr@tc@ zZ@aM`68nz0c=BY%4H9mE*dP-XJvgw2n0f4$dLjZ zf^#H?eS`ql!#-RvL4cP0T!3@M0?Aj+;0sI%_EdW$M_tnewkkeyEE1V2AOXtrNiY~J zw--K2kNVOO3s3tv{+iCBc@u(G$0NU> zbn~(6x|YuIj6R)C;k@X&p3ldMDTWWrA$ra^(WhsU{)OWHewo-;6?<;z^&|I75ajSn znd}>SK))vPrasThPEcgMUlh1DYB;46OsfAbJ+Eg!MA9#K!@Ar2wTv z#J2_TinCZx^PCYTz5cH^zZk466im!QNi~QaMg*M%hfr6<4qPaCa3_UBXoQ6=^au+H zF63jX?8W}ugZC(xL#WnKLFfYpXA=bF!?-C!9PW-gy(55AjKgp{RB-|)hnv8-Y}w)~ zfi*^Ok04WUOkVJCldO*`#}i>5OdsuP5q3aESER9#N(Y@)8Rm@Iqb_bN%+a0)Ei>&xLGl{PUP^Xx#k|{`8+e7_|klnnn-=( zs8A}hSTL!D)VpV}ygX-t@o2A)zq!C9*Q;Y*U(@9I)un4!R+QI}YCYp^np{--c**h& z6}6;}dwp~LO_PMEtSGCJ(@kIfY+q91tFA7sBehk|XWZgy*Hl%Ms}dMa3z7cP%F43R z@+U}b6WggFx}fx_I>mYUCiVeUhcNS+?hWY*%T}pkB>Op4wEVkjrJTQIQ&d-@mU`#% z2l*yX`*S(zA=5H8?+4rW9ha{r2Ky?CF5`cN&pu?Pk(b9TG>?kdywIE_uTxrJ_LIn@ zMP`9WUSDVm#&}y=Ze3>Xx)m#yS9|$?g{C{^;+~qAj{4ZI#jmh`KKX~!OS$(OW{Jz| wFPxXFXyO@Ozt|+Fx{ee*`tV!{8SP)t*V@!nVI>mX*2KpKVywz-v9sr diff --git a/tinker/cube.ml b/tinker/cube.ml index 6aa4cec..93fc074 100644 --- a/tinker/cube.ml +++ b/tinker/cube.ml @@ -13,25 +13,34 @@ let project (x, y, z) = (x /. z, y /. z);; let rotate_y (x, y, z) angle = - let ox = x in - let oz = z in ( - ox *. cos(angle) -. oz *. sin(angle), + x *. cos(angle) -. z *. sin(angle), y, - ox *. sin(angle) +. oz *. cos(angle) + x *. sin(angle) +. z *. cos(angle) );; let rotate_x (x, y, z) angle = - let oy = y in - let oz = z in ( x, - oy *. cos(angle) -. oz *. sin(angle), - oy *. sin(angle) +. oz *. cos(angle) + y *. cos(angle) -. z *. sin(angle), + y *. sin(angle) +. z *. cos(angle) );; +let rotate_z (x, y, z) angle = + ( + x *. cos(angle) -. y *. sin(angle), + x *. sin(angle) +. y *. cos(angle), + z + );; + +let translate_x (x, y, z) dx = + (x +. dx, y, z);; + +let translate_y (x, y, z) dy = + (x, y +. dy, z);; + let translate_z (x, y, z) dz = - (x, y +. 0.175, z +. dz);; + (x, y, z +. dz);; (* CUBE *) let vertecies = [ @@ -70,38 +79,23 @@ let rec get_vertex v i = if i = 0 then x else get_vertex xs (i - 1);; -let draw_face (a, b, c, d) angle = - let va = (get_vertex vertecies a) in - let vb = (get_vertex vertecies b) in - let vc = (get_vertex vertecies c) in - let vd = (get_vertex vertecies d) in - - let va = rotate_y va angle in - let vb = rotate_y vb angle in - let vc = rotate_y vc angle in - let vd = rotate_y vd angle in - - let va = rotate_x va angle in - let vb = rotate_x vb angle in - let vc = rotate_x vc angle in - let vd = rotate_x vd angle in - - let va = translate_z va 1.25 in - let vb = translate_z vb 1.25 in - let vc = translate_z vc 1.25 in - let vd = translate_z vd 1.25 in +let draw_face (a, b, c, d) v angle = + let va = get_vertex v a in + let vb = get_vertex v b in + let vc = get_vertex v c in + let vd = get_vertex v d in draw_line va vb; draw_line vb vc; draw_line vc vd; draw_line vd va;; -let rec draw_cube faces angle = +let rec draw_cube faces v angle = match faces with | [] -> () | (a, b, c, d) :: fs -> - draw_face (a, b, c, d) angle; - draw_cube fs angle;; + draw_face (a, b, c, d) v angle; + draw_cube fs v angle;; (* END CUBE *) (* SPHERE *) @@ -113,7 +107,7 @@ let gen_sphere_vertecies st sl r = let rec gen_slice j sp cp sv = if j = -1 then sv else - let theta = 2. *. 3.1415926 *. float_of_int j /. float_of_int (sl) in + let theta = 2. *. 3.1415926 *. float_of_int j /. float_of_int sl in let sinTheta = sin theta in let cosTheta = cos theta in gen_slice (j - 1) sp cp ((r *. cosTheta *. sp, r *. cp, r *. sinTheta *. sp) :: sv) @@ -160,9 +154,8 @@ let rec get_nth_vert e n = let draw_sphere v st sl = let rec render_slices i = let rec iter_slices j e = - if j = (sl - 1) then e - else - iter_slices (j + 1) (get_nth_vert v (i * sl + j) :: e) + if j = sl then e + else iter_slices (j + 1) (get_nth_vert v (i * sl + j) :: e) in let e = iter_slices 0 [] in draw_ellipse e true; @@ -172,58 +165,66 @@ let draw_sphere v st sl = let rec render_stacks j = let rec iter_stacks i e = - if i = (st - 1) then e + if i = st then e else iter_stacks (i + 1) (get_nth_vert v (i * sl + j) :: e) in let e = iter_stacks 0 [] in draw_ellipse e false; - if j = sl - 1 then () + if j = st + 1 then () else render_stacks (j + 1) in render_slices 0; render_stacks 0;; -let list_translate_z l = +let list_transform t l d = let rec translate r n = match r with | [] -> n - | x :: xs -> translate (xs) (translate_z x 1. :: n) - in - - translate l [];; - -let list_rotate_y l angle = - let rec translate r n = - match r with - | [] -> n - | x :: xs -> translate (xs) (rotate_y x angle :: n) + | x :: xs -> translate (xs) (t x d :: n) in translate l [];; (* END SPHERE *) -let rec animate angle sv = +let rec animate angle sv sqv = clear_graph (); set_color (rgb 0 0 0); - fill_rect 0 0 800 800; + fill_rect 0 0 (int_of_float window_w) (int_of_float window_h); set_color cyan; - (* draw_cube faces angle; *) + draw_cube faces sqv angle; draw_sphere sv stacks slices; Graphics.synchronize (); - animate (angle +. 0.0005) (list_translate_z (list_rotate_y (gen_sphere_vertecies 10 12 0.175) angle));; + let nsv = gen_sphere_vertecies 10 12 0.175 in + let nsv = list_transform rotate_y nsv (-1. *. angle) in + let nsv = list_transform rotate_x nsv (-1. *. angle) in + let nsv = list_transform translate_x nsv (sin angle /. -2.) in + let nsv = list_transform translate_y nsv (cos angle /. -2.) in + let nsv = list_transform translate_z nsv (1. +. sin(angle) /. 2.) in + + let nsqv = vertecies in + let nsqv = list_transform rotate_y nsqv angle in + let nsqv = list_transform rotate_x nsqv angle in + let nsqv = list_transform translate_x nsqv (sin angle) in + let nsqv = list_transform translate_y nsqv (cos angle) in + let nsqv = list_transform translate_z nsqv (2. +. (sin (-1. *. angle)) /. 2.) in + + animate (angle +. 0.0005) nsv nsqv;; let () = + let size = " " ^ (string_of_float window_w) ^ "x" ^ (string_of_float window_h) ^ "+560+140" in + Printf.printf "Size: %s\n" size; + (* open_graph size; *) open_graph " 800x800+560+140"; auto_synchronize false; - animate 0. s_vertecies; + animate 0. s_vertecies vertecies; close_graph () diff --git a/tinker/output.txt b/tinker/output.txt deleted file mode 100644 index e69de29..0000000 diff --git a/tinker/proper.txt b/tinker/proper.txt deleted file mode 100644 index eb8efda..0000000 --- a/tinker/proper.txt +++ /dev/null @@ -1,6 +0,0 @@ -(0.000000, 0.050000, 0.000000) -(-0.000000, 0.050000, 0.000000) -(-0.000000, 0.050000, -0.000000) -(-0.000000, -0.050000, -0.000000) -(0.000000, -0.050000, -0.000000) -(0.000000, -0.050000, 0.000000) diff --git a/tinker/sphere.ml b/tinker/sphere.ml deleted file mode 100644 index 22fbe68..0000000 --- a/tinker/sphere.ml +++ /dev/null @@ -1,53 +0,0 @@ -let stacks = 10;; -let slices = 12;; -let radius = 0.175;; - -let gen_sphere_vertecies st sl r = - let rec gen_slice j sp cp sv = - if j = -1 then sv - else - let theta = 2. *. 3.1415926 *. float_of_int j /. float_of_int (sl) in - let sinTheta = sin theta in - let cosTheta = cos theta in - gen_slice (j - 1) sp cp ((r *. cosTheta *. sp, r *. cp, r *. sinTheta *. sp) :: sv) - in - - let rec gen_stack i sv = - if i = -1 then sv - else - let phi = 3.1415926 *. float_of_int i /. float_of_int (st - 1) in - let sinPhi = sin phi in - let cosPhi = cos phi in - gen_stack (i - 1) (gen_slice (sl - 1) sinPhi cosPhi sv) - in - - gen_stack (st - 1) [];; - -let reverse_tr l = - let rec reverse_tr' acc l = - match l with - | [] -> acc - | x :: xs -> reverse_tr' (x :: acc) xs - in - reverse_tr' [] l;; - -let write_string_list_to_file filename (lines : string list) : unit = - Out_channel.with_open_text filename (fun oc -> - List.iter (Printf.fprintf oc "%s\n") lines - );; - -let convert_to_string l = - let rec convert r n = - match r with - | [] -> reverse_tr n - | (x, y, z) :: xs -> - let s = Printf.sprintf "(%f, %f, %f)" x y z in - convert xs (s :: n) - in - convert l [];; - -let () = - let vertecies = gen_sphere_vertecies 10 12 0.175 in - let file_path = "output.txt" in - write_string_list_to_file file_path (convert_to_string vertecies); - Printf.printf "Successfully wrote list to %s\n" file_path diff --git a/tinker/test.c b/tinker/test.c index 39fcec1..3bd7b8a 100644 --- a/tinker/test.c +++ b/tinker/test.c @@ -20,38 +20,6 @@ void print_vertecies(VEC3 v[], size_t s) printf("]"); } -VEC3 *gen_sphere_vertecies(int stacks, int slices, float r) -{ - // Generate sphere vectors - VEC3 *sphere_vertecies = malloc(stacks * slices * sizeof(VEC3)); - - for (int i = 0; i < stacks; i++) - { - // Phi (angle of latitude, ranges from 0 to PI) - float phi = M_PI * (float)i / (float)(stacks - 1); - 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_vertecies[i * slices + j] = (VEC3){ - .x = r * cosTheta * sinPhi, - .y = r * cosPhi, - .z = r * sinTheta * sinPhi, - }; - } - } - - return sphere_vertecies; -} - int main(void) { int stacks = 10; diff --git a/tinker/tinker.ml b/tinker/tinker.ml index 5796762..3e66e77 100644 --- a/tinker/tinker.ml +++ b/tinker/tinker.ml @@ -2,12 +2,13 @@ let stacks = 10;; let slices = 12;; +let radius = 0.175;; let gen_sphere_vertecies st sl r = let rec gen_slice j sp cp sv = if j = -1 then sv else - let theta = 2. *. 3.1415926 *. float_of_int j /. float_of_int (slices) in + let theta = 2. *. 3.1415926 *. float_of_int j /. float_of_int sl in let sinTheta = sin theta in let cosTheta = cos theta in gen_slice (j - 1) sp cp ((r *. cosTheta *. sp, r *. cp, r *. sinTheta *. sp) :: sv) @@ -16,38 +17,67 @@ let gen_sphere_vertecies st sl r = let rec gen_stack i sv = if i = -1 then sv else - let phi = 3.1415926 *. float_of_int i /. float_of_int (stacks - i) in + let phi = 3.1415926 *. float_of_int i /. float_of_int (st - 1) in let sinPhi = sin phi in let cosPhi = cos phi in - gen_stack (i - 1) (gen_slice (slices - 1) sinPhi cosPhi sv) + gen_stack (i - 1) (gen_slice (sl - 1) sinPhi cosPhi sv) in - gen_stack (stacks - 1) [];; + gen_stack (st - 1) [];; -let draw_line (x1, y1) (x2, y2) = - Printf.printf "(%f, %f) -> (%f, %f)\n" x1 y1 x2 y2 +let draw_line (x1, y1, z1) (x2, y2, z2) = + Printf.printf "(%f, %f, %f) -> (%f, %f, %f)\n" x1 y1 z1 x2 y2 z2 let draw_ellipse ev o = let f = match ev with - | [] -> (0., 0.) - | (x, y, _) :: _ -> (x, y) in + | [] -> (0., 0., 0.) + | a :: _ -> a in - let rec iter_vertex (lx, ly) v = + let rec iter_vertex l v = match v with - | [] -> (lx, ly) - | [(x, y, _)] -> draw_line (x, y) (lx, ly); (x, y) - | [(x1, y1, _); (x2, y2, _)] -> draw_line (x1, y1) (x2, y2); (x2, y2) - | (x1, y1, _) :: (x2, y2, _) :: vs -> - draw_line (x1, y1) (x2, y2); - iter_vertex (x2, y2) ((x2, y2, 0.) :: vs) + | [] -> l + | [a] -> draw_line a l; a + | [a; b] -> draw_line a b; b + | a :: b :: vs -> + draw_line a b; + iter_vertex b (b :: vs) in - let l = iter_vertex (0., 0.) ev in + let l = iter_vertex (0., 0., 0.) ev in - if o = 0 then draw_line f l;; + if o then draw_line f l;; let rec get_nth_vert e n = match e with - | [] -> failwith "cannot find nth element" + | [] -> failwith "cannot find nth vertex" | x :: xs -> if n = 0 then x else get_nth_vert xs (n - 1);; + +let draw_sphere v st sl = + let rec render_slices i = + let rec iter_slices j e = + if j = 1 then e + else iter_slices (j + 1) (get_nth_vert v (i * sl + j) :: e) + in + let e = iter_slices 0 [] in + draw_ellipse e true; + if i = st - 1 then () + else render_slices (i + 1) + in + + let rec render_stacks j = + let rec iter_stacks i e = + if i = 1 then e + else iter_stacks (i + 1) (get_nth_vert v (i * sl + j) :: e) + in + let e = iter_stacks 0 [] in + draw_ellipse e false; + if j = sl - 1 then () + else render_stacks (j + 1) + in + + render_slices 0;; + (* render_stacks 0;; *) + +let s_vertecies = gen_sphere_vertecies stacks slices radius;; +draw_sphere s_vertecies stacks slices;;