From 930330d024fe01fa78365bf099c56d801282d884 Mon Sep 17 00:00:00 2001 From: uan Date: Thu, 25 Dec 2025 15:18:06 +0100 Subject: [PATCH] non mi ricordo nemmeno io che cosa ho aggiunto --- main | Bin 19368 -> 19496 bytes main.c | 18 +++++++++++------- objects.c | 12 ++++++------ 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/main b/main index 9ad7af82c323301431439d53c753e7eb255375b3..0005d9176766211354373562df19308ba2acb57e 100755 GIT binary patch delta 4082 zcmZ`64OCQB`rbDT%#6UBA7Dm)2NW2TX3z>y{vOD{Q)3rX6J1l=71DMOkYHBZQ3+j{ z#ai&|l&+nVmUZlBcQrg4xqB2)LuQtXE9b!G(l6T0e7})`j}Hb)jITZewkTpM4Y- z(p^@P?&nClVgEfn*3r8Asgb*Yryl3LA7xgi=xB_(BY+Ek-zEB>=)ZWog17ol&^u2tX?WuAq`yx9a zFE~1XsoXf|>h=z@Fast^NV9iP-YYkD2y%1K8D}A8;`8>)&EEbI(JVPe#8n-PX)bp% z1g*ig`^P3#mCGb&bL6fhLaM~-E?>9u{54heb=~GFHycJpvurqF#*il&5MAf1WU;za znU7U#JKO#^%9^@;Jz<2XkYw~E^k4+E*xDhwIx(G(Mn#LacU0WE94WK67ix|6rB7nC zM(-eH`Tyd)+^lcN!==va5})kHSzB7<=KCkkoni%HOO^vm9uWS|l9eUbU^uv*#z0lb zvOB|qaalJqXlEHadZjL{H}23u-W zT;uJGvioan30wZqN|6ky-Rua`>C1eSR#g-cBK+~pYICA{hGQfxGCmt z?<8(LxsnVSra0@!1l!R`tktByRu))mn!fGI-MC}=O9+pz!;|WJAB$awrp@|~QHD$k z=FnW$bdH%(AS%N_2gWRu_GrAjQv1hw?5ZD|zrqR(37%18m}z z+Qf$#lc6z(114`UX{IJU5|ADX5Ui>7S3nGn%(@oq&-Qe;_bl5QCG3&!uIW)uli(3^x-dQp zhs>!$?+E-Ik&UUMAk>m5JTw9x%W7fw2s~v;655C1sHFt25`IBqkKjBnjXV2T`704^gpx&ABYX`p%&8$mSdq2W0 zJcsv$xa&ixjd&=H&Ce8Ncu}r8HzKb50GsD5-URQ;%{yhx4ckp}p&ZnRmE0N)S2LH} ztfiZ+qW~fubQ!!6nMKp#a^xK0tE*s-$`rb;!cU_zgzZ*|QNdVN{V`pP?tN%5u!wk)mPP`Rmc#l}sQb@1?v z&E}<*^(!`3udmrsR#UyPzGhR~7cYz0pWW z5E)=f9L%Fn(=+~9>$CW$q$A^+%x^D{0oa#3o5r=BN!}&USSWMl2lMPa8$6tTP{0Z-~KU#Zy3%(e2O^#kO65vB)kJqc7XHetxGj| zgtR9u_WnmdRn;SC)^ri?NW|@kpGREXtExSS_amM_-1ARWjivaS)UT=%VhQi?b%^h} zjDCpw5FbXo;7e6Ki#S+O)j@bHE!92onX0DX45T>3%u1PoPXtEMGZ~JV_!Q&Q(W9zn z0p3qb+V(W6?_j#ZaPx131!2J(LPPMcnmF;GZ*woprnUgEm@G+YIjGE&=|bDTkj$ybLjl>NNCpiR2_8EOoCCp-%@E5`V; zX8tmA1;#PEf09XP&5AJ{2}~Ib|H_Ouj%dmero5Sh^I0>eO=^1Tkg(Ac!I|w8@MEDU z+YL?GX4sx>u=Hy)@=OuTg-h9Xql^?K(+R$NXM1Ql3}kPi6Y#)14^^Ob-rDK2%@TJw zr4{l5Vk;i%S}@KpHGOUIYlDJe)%^RgyhrC}Q5Ou%Um=vIK~c^cdLJCjS!?VF@!Q3M zF}Hwr!@}HBe9v#qwMRE<`^ei9BRzrLV-dnhMH+PFx@j*A=i1&-p~B1(_4=nm zTR#2*mvZdWyHRTug2(}Fk%7a~2M^@MaQ{iozx)<|3Y~d&8qHxkhnXBo3{GEy-C-t< z+oD!*?Pk=nV#J0^JeSw~DUm1m47)ho%ix@sHB0vW#0Ebkh+kuJK_Iz0iHWa|Biy&E z?P&g=h47oNY^W^!?6!Lu@{4ARw_M1LQ356aWAK delta 3716 zcmZt}3sh8P`u{HsG9z&B9R_B2D5LTiAZGx}0Y$ka7cMGCTxC~RQMQuQbJ8@y_LpP@%VT0W*ksCB^;?TX)RYHj5pucN&1db9S+@90~;bdYI$N zrAyFyeXl&otY6HDA;d2aD*KeS5U2QKPdFN;V8b36kl)n3Ah-a!=;abV9uVg z!%4^pzwB5u@9DlTHL7lC4#i`_G|(o8F@vz4K~Fi{X`Y;P{<^A0Fn=sW;(>Ai^VIFZ z@3HPG$EcXe3Jk+EoJB~4UnQSi=wCCy!cqM739ME&qf*Dhhj4Q=japw-c0#0*7pt;u zLDF>rk7iG=uRljsiJC}A5%Kl-`Vk?juZLNS@Y~QFESQis=gV)$&0saUST#Z@Z$M0t z*=eC~fw_+No#S2otS-mGJJESKa2*y~COL+GXyG`s@D9ceyDZMx%fBbA^~GlELB_Yq zgIJ(Jy+Ap$wIk*qIx(iIfq>F>ynaRH%0~Fq;<5hin;-SVyO23CZF}cTJayAExW3Wh zl8EnJJf$L3^_$v}hs1eC)a`lki!OGb_MB+_537am6c)it^h)3fevO%m@$?BY;DF!rMKpIQ3jBTkKZ023(ah~ygjH}kbq3~@SYG43ntdPH9$4jK^ z0T#f?*3Yy6PNVPPXaLObpAEnLjMxf7f^GYx7Q^dW9h&afy)u=$fuD2wZ>l@piPgqC z6S#%-l9rs55JiM2VvAUlrQ2s;Z##42<~bq+HG9!toW_o|_IG%CW{38oJX z?(tsv6y{07f4Qcr7eyA&qjJZa2(@a6qu4Lya5Z5HxAhvNC6>{1uq4q}^a^T+AHuT= zC$Z%TMiyViZZf6Jk?A4U~g(MxBC(tPo2rFz64{bMckxI;I@}@+rNSh_5vD&C+%~%l&|0;`{ZE6 zo)`~;<8Zrk8T}mYcG_tbt{z$q2N8c-<80ON_ZZ$j#X(nS%m=h}6B9uIxg{FCPFs&_ z>mlf#;(@T!L6bBCi!^Sdh7Y04p`7MxQZbcu!y%!-9)oi^I4NzZ6|Ueng~@V?Ul zzG-=8dE*^*cipjOMiqQAZF6vSb|D2{&MgqiiC+*)DE^+sgBP&9oj5nAuQL-8OS)LU zatmo@P|n@W(Mj-6*K9b-#Y27mG-%7uDCwwV zn~C(eq(L&o9=|$|F{A?$12`l?hPny4`Bv!9&upweqpB|;x9BWB1`swO+>bEzU#i-V za2~=@gfAgIGO_kmv6BR8@1) z0;!rHuo@KMJc>LM5cOo`~^V&I8 zP59{!65V0Ll+M8eg&C%s5nB&WA+{8;Bk+1*R{H&j)nVdeET?G9N?T0K*TIp(FDUl& zK$$a6LLquH=@7SQ0}LcevsPgvN*@8yokbNWcCW@4tG(_l?mY@Gx#yO2;lqOsn-0hX z0~+t3{keAfc#u}S%0X{s zKfG{jLGZt~ZliE#)j#Kx@2Whe351Iz=GX+M%h&0i)Fd*TuoZHEuD0?|^Is zTpA!PFzif*vo)FK@y{r#c*PduqpHRD$l4FJibov(Uek9=P+Xb}`;|<~_$OQNm{LvQ zV_5*l{35)xwevmZ=I==#W-MDT9y1;8z)<~ME5L7Oxu*8?@c0+OS@Pe7 #include #include +#include #include "objects.h" struct global { @@ -10,9 +11,10 @@ struct global { object *objs[128]; size_t obj_count; double terminal_v; + double friction; }; -struct global gl = {1600, 900, 144, {}, 0, 15}; +struct global gl = {1600, 900, 144, {}, 0, 15, 0.001}; void addobj(object *obj) { @@ -25,6 +27,8 @@ void drawobjs() { object *obj = gl.objs[i]; DrawSphere(obj->pos, obj->r, obj->color); + DrawSphereWires(obj->pos, obj->r, 16, 16, ColorBrightness(obj->color, -0.5f)); + DrawLine3D(obj->pos, Vector3Add(obj->pos, obj->vel), PURPLE); } } @@ -59,7 +63,7 @@ void updateobjs() { obj->vel = Vector3Scale(obj->vel, 1.0f/ratio_speed_to_terminal); } - DrawLine3D(obj->pos, Vector3Add(obj->pos, obj->vel), GREEN); + obj->vel = Vector3Scale(obj->vel, (1.0f-gl.friction)); obj->pos = Vector3Add(obj->pos, Vector3Scale(obj->vel, GetFrameTime())); } } @@ -78,18 +82,18 @@ int main(void) { InitWindow(gl.scwidth, gl.scheight, "raylib engine"); SetTargetFPS(gl.fps); - addobj(newobj((Vector3){0, 20, 0}, 1, RED, 1, 1000)); - addobj(newobj((Vector3){8, 20, 0}, 2, BLUE, 1, 2000)); - gl.objs[1]->vel = (Vector3){0, 0, 0}; - Camera3D camera = {{0, 20, -30}, {0, 0, 0}, {0, 1, 0}, 45, CAMERA_PERSPECTIVE}; + addobj(newobj((Vector3){10, 40, 0}, 2, BLUE, 1, 200000)); + addobj(newobj((Vector3){50, 20, 0}, 5, RAYWHITE, 0., 5000000)); + Camera3D camera = {{0, 20, 10}, {0, 20, 0}, {0, 1, 0}, 50, CAMERA_PERSPECTIVE}; DisableCursor(); + SetWindowMonitor(0); while(!WindowShouldClose()) { - UpdateCamera(&camera, CAMERA_FREE); BeginDrawing(); { + UpdateCamera(&camera, CAMERA_FREE); ClearBackground(BLACK); BeginMode3D(camera); DrawPlane((Vector3){0, 0, 0}, (Vector2){500, 500}, RAYWHITE); diff --git a/objects.c b/objects.c index 87c874f..1cb9309 100644 --- a/objects.c +++ b/objects.c @@ -1,6 +1,7 @@ #include "objects.h" #include #include +#include #define min(a, b) (a>b?b:a); #define max(a, b) (a>b?a:b); @@ -61,7 +62,7 @@ void resolve_collision(object *obj1, object *obj2) float sumrad = obj1->r+obj2->r; float mindistsq = sumrad*sumrad; - if (distsq < mindistsq) { + if (distsq <= mindistsq) { float dist = sqrtf(distsq); if (dist == 0) { @@ -73,9 +74,8 @@ void resolve_collision(object *obj1, object *obj2) float overlap = sumrad - dist; Vector3 separation = Vector3Scale(normal, overlap / 2.0f); - - obj1->pos = Vector3Subtract(obj1->pos, separation); - obj2->pos = Vector3Add(obj2->pos, separation); + obj1->pos = Vector3Add(obj1->pos, separation); + obj2->pos = Vector3Subtract(obj2->pos, separation); } else { normal = Vector3Normalize(normal); @@ -87,8 +87,8 @@ void resolve_collision(object *obj1, object *obj2) if (vel1_normal - vel2_normal > 0) return; float totalmass = obj1->mass + obj2->mass; - float vel1_normal_final = (obj1->mass * vel1_normal + obj2->mass * vel2_normal - obj2->mass * obj2->restitution * (vel1_normal - vel2_normal)) / totalmass; - float vel2_normal_final = (obj1->mass * vel1_normal + obj2->mass * vel2_normal - obj2->mass * obj1->restitution * (vel2_normal - vel1_normal)) / totalmass; + float vel1_normal_final = (obj1->mass * vel1_normal + obj2->mass * vel2_normal - obj2->mass * (vel1_normal - vel2_normal)) * obj1->restitution / totalmass; + float vel2_normal_final = (obj1->mass * vel1_normal + obj2->mass * vel2_normal - obj2->mass * (vel2_normal - vel1_normal)) * obj2->restitution / totalmass; Vector3 vel1_tang = Vector3Subtract(obj1->vel, Vector3Scale(normal, vel1_normal)); Vector3 vel2_tang = Vector3Subtract(obj2->vel, Vector3Scale(normal, vel2_normal));