Skip to content

Commit

Permalink
[update][fix] hardness and flag for user-case reserved, fixed memory …
Browse files Browse the repository at this point in the history
…issues
  • Loading branch information
MrsRina committed Oct 3, 2024
1 parent f2a1816 commit af9e300
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 7 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.9)

set(CMAKE_CXX_STANDARD 17)
set(BICUDO_VERSIION 1.2.0)
set(BICUDO_VERSIION 1.3.1)

if(
CMAKE_CXX_COMPILER_ID STREQUAL "Clang"
Expand Down
36 changes: 36 additions & 0 deletions dev/equations.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
a equação da energia cinética é (m * v * v) / 2, m é massa e v é velocidade, pro ce usa rina :) By Hamdolf WB s2


m1 : massa do objeto maior.
v1 : velocidade do objeto maior antes da colisão
m2: massa do objeto menor
v2: velocidade do objeto menor (pode ser 0 se estiver parado)
e: energia de deformação/fratura do objeto menor.
F: força de impacto durante a colisão.
K: coeficiente de fratura (o fator que indica o potencial de fratura do objeto menor).


A força de impacto pode ser aproximada como:
F = x
// Onde Δv é a variação de velocidade do objeto maior após o impacto e Δt é o tempo de contato

coeficiente de Fratura (K)Agora, o coeficiente de fratura pode ser relacionado à fração da energia cinética transferida ao objeto menor que excede sua resistência a fratura 𝑒 e,
que pode ser definida como a energia que o objeto menor pode absorver antes de quebrar
K é o coeficiente de fratura;
K = e*F*v*1

F×Δv1 é a força efetiva que atinge o objeto menor, levando em conta a variação de velocidade do objeto maior;e é a resistência à fratura do objeto menor (propriedade do material).
Se 𝐾 > 1 K>1, o objeto menor tem grandes chances de se fraturar
Se 𝐾 ≤ 1 K≤1, o objeto menor pode resistir ao impacto.



Ecin = 0.5 * m1 * v1^2 + 0.5 * m2 * v2²
Ecin = 0.5 * m1 * v1 * v1 + 0.5 * m2 * v2 * v2




O valor de 𝑒 e precisa ser conhecido ou estimado com base na resistência do material à fratura (como uma função de dureza, rigidez, e absorção de energia do materia

e = energia cinetica
2 changes: 1 addition & 1 deletion include/bicudo/bicudo.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#include "bicudo/physics/placement.hpp"
#include <cstdint>

#define bicudo_version "1.2.0"
#define bicudo_version "1.3.1"

namespace bicudo {
typedef void(*p_on_collision_pre_apply_forces)(bicudo::physics::placement*&, bicudo::physics::placement*&);
Expand Down
2 changes: 2 additions & 0 deletions include/bicudo/physics/placement.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ namespace bicudo::physics {
public:
const char *p_tag {};
bicudo::id id {};
bicudo::flags flags {};

float mass {};
float friction {};
float restitution {};
float inertia {};
float hardness {};

bicudo::vec2 min {};
bicudo::vec2 max {};
Expand Down
1 change: 1 addition & 0 deletions include/bicudo/physics/types.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ namespace bicudo {

typedef uint64_t id;
typedef bool collided;
typedef uint64_t flags;
}

#endif
16 changes: 12 additions & 4 deletions src/bicudo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,16 @@ void bicudo::erase(
bicudo::physics::placement *p_placement
) {
for (uint64_t it {}; it < p_runtime->placement_list.size(); it++) {
bicudo::physics::placement *&p_alive_placement {
bicudo::physics::placement *p_alive_placement {
p_runtime->placement_list.at(it)
};

if (p_alive_placement != nullptr && p_alive_placement == p_placement) {
p_runtime->placement_list.erase(p_runtime->placement_list.begin() + it);
p_runtime->placement_list.erase(
p_runtime->placement_list.begin() + it
);

delete p_alive_placement;
break;
}
}
Expand All @@ -64,12 +68,16 @@ void bicudo::erase(
bicudo::id id
) {
for (uint64_t it {}; it < p_runtime->placement_list.size(); it++) {
bicudo::physics::placement *&p_alive_placement {
bicudo::physics::placement *p_alive_placement {
p_runtime->placement_list.at(it)
};

if (p_alive_placement != nullptr && p_alive_placement->id == id) {
p_runtime->placement_list.erase(p_runtime->placement_list.begin() + it);
p_runtime->placement_list.erase(
p_runtime->placement_list.begin() + it
);

delete p_alive_placement;
break;
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/physics/processor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -150,7 +150,7 @@ void bicudo::physics_processor_update(
p_a->angular_velocity -= c1_cross * jn * p_a->inertia;
p_b->angular_velocity += c2_cross * jn * p_b->inertia;

tangent = vdiff - n * vdiff.dot(n);
tangent = vdiff - n * vdiff_dot;
tangent = tangent.normalize() * -1.0f;

c1_cross = c1.cross(tangent);
Expand Down

0 comments on commit af9e300

Please sign in to comment.