non mi ricordo nemmeno io che cosa ho aggiunto
This commit is contained in:
12
objects.c
12
objects.c
@@ -1,6 +1,7 @@
|
||||
#include "objects.h"
|
||||
#include <math.h>
|
||||
#include <raymath.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#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));
|
||||
|
||||
Reference in New Issue
Block a user