le palle si scontrano

This commit is contained in:
uan
2025-12-24 14:24:07 +01:00
parent 5792addc4b
commit e4c77ed5e2
4 changed files with 115 additions and 60 deletions

57
main.c
View File

@@ -4,7 +4,6 @@
#include <stdio.h>
#include "objects.h"
struct global {
const int scwidth, scheight;
int fps;
@@ -15,12 +14,6 @@ struct global {
struct global gl = {1600, 900, 144, {}, 0, 15};
float min(float a, float b)
{return a>b?b:a;}
float max(float a, float b)
{return a>b?a:b;}
void addobj(object *obj)
{
gl.objs[gl.obj_count++] = obj;
@@ -35,43 +28,6 @@ void drawobjs()
}
}
Vector3 gravitation_force(object *obj1, object *obj2)
{
const double GRAVITY_FACTOR = 1;
Vector3 force;
double dist, mass, total_g;
mass = obj1->mass * obj2->mass;
force = Vector3Subtract(obj2->pos, obj1->pos);
dist = Vector3Length(force);
force = Vector3Normalize(force);
dist = max(dist, obj1->r+obj2->r);
total_g = GRAVITY_FACTOR * mass / (dist * dist);
force = Vector3Scale(force, total_g);
return force;
}
void integrate_g(object *obj1, object *obj2, Vector3 force)
{
Vector3 acc;
double f, a;
f = Vector3Length(force);
//acc = Vector3Scale(Vector3Subtract(obj1->pos, obj2->pos), f);
acc = force;
a = f / obj1->mass;
acc = Vector3Scale(Vector3Normalize(acc), a*GetFrameTime());
obj1->vel = Vector3Add(obj1->vel, acc);
a = f / obj2->mass;
acc = Vector3Scale(Vector3Normalize(acc), a*GetFrameTime());
obj2->vel = Vector3Add(obj2->vel, acc);
}
void updateobjs()
{
for (int i = 0; i < gl.obj_count; i++)
@@ -93,6 +49,10 @@ void updateobjs()
//{
// Vector3SubtractValue(obj->pos, min_dist_delta);
//}
if (Vector3Distance(obj->pos, obj2->pos) < obj->r+obj2->r+0.01f)
{
resolve_collision(obj, obj2);
}
}
float ratio_speed_to_terminal = Vector3Length(obj->vel)/gl.terminal_v;
if (Vector3Length(obj->vel) > gl.terminal_v)
@@ -118,10 +78,9 @@ int main(void) {
InitWindow(gl.scwidth, gl.scheight, "raylib engine");
SetTargetFPS(gl.fps);
addobj(newobj((Vector3){0, 20, 0}, 3, RED, 1, 50000));
addobj(newobj((Vector3){4, 20, 0}, 1, BLUE, 1, 1000));
addobj(newobj((Vector3){-6, 18, 0}, 2, GREEN, 1, 2000));
gl.objs[1]->vel = (Vector3){0, 0, 2};
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};
DisableCursor();
@@ -133,7 +92,7 @@ int main(void) {
{
ClearBackground(BLACK);
BeginMode3D(camera);
DrawPlane((Vector3){0, 0, 0}, (Vector2){100, 100}, GRAY);
DrawPlane((Vector3){0, 0, 0}, (Vector2){500, 500}, RAYWHITE);
updateobjs();
drawobjs();
EndMode3D();