C++ – Libreria basica de detección de colision en 2D

Aquí les comparto una libreria (h y cpp) el cual solo determina si ciertas figuras estan o no entrando en colision entre ellas. Su uso simplemente es llamar una función como:


if(Physics::RectBall(box.x, box.y, box.w, box.h, circle.x, circle.y, circle.r))
{
  //HUBO COLISION
}

Donde solo se manda posicion ‘x’, ‘y’, ancho y alto del rectangulo y ‘x’, ‘y’ y radio de la esfera la función regresa true si estan impactando o false en caso contrario.

Aquí dejo un pequeño demo para windows con el cual pueden jugar un poco. Descargar

Demo detección de colisión

Demo detección de colisión

Las funciones que contiene esta pequeña libreria de detección de colision es:

  •  //Esferea con esfera
    bool BallBall(float _bx1, float _by1, float _br1, float _bx2, float _by2, float _br2);
  •  //Linea y Esfera
    bool BallLine(float _bx, float _by, int _br, float _lx1, float _ly1, float _lx2, float _ly2);
  •  //Rectangulo y esfera
    bool RectBall(float _rx, float _ry, float _rw, float _rh, float _bx, float _by, float _br);
  • //Rectangulo y rectangulo
    bool RectRect(float _rx1, float _ry1, float _rw1, float _rh1, float _rx2, float _ry2, float _rw2, float _rh2);
  • //Punto y triangulo Teoria barycentric
    bool PointTriangle(float _tx1, float _ty1, float _tx2, float _ty2, float _tx3, float _ty3, float _px, float _py);
  • //Punto y esfera
    bool PointBall(float _px, float _py, float _bx, float _by, float _br);
  • //Punto y rectangulo
    bool PointRect(float _px, float _py, float _rx, float _ry, float _rw, float _rh);
  • //Punto y punto
    bool PointPoint(float _x1, float _y1, float _x2, float _y2);
  • //Punto y Linea
    bool PointLine(float _px, float _py, float _lx1, float _ly1, float _lx2, float _ly2);
  • //Linea y Linea
    bool LineLine(float _x1, float _y1, float _x2, float _y2, float _x3, float _y3, float _x4, float _y4);

Descargar .h y .cpp

5 Comentarios en “C++ – Libreria basica de detección de colision en 2D

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.