2D Geometry
Overview
2D geometric primitives including circles, axis-aligned bounding boxes, capsules, edges, planes, polygons, and triangles. Also includes raycasting and collision manifold types for 2D collision detection.
Why Use This?
These primitives are the building blocks for 2D physics engines, collision detection, spatial queries, and computational geometry.
Shapes
Circle
A circle defined by center point and radius.
Types: lm2_circle_f64, lm2_circle_f32, lm2_circle (default = f32)
Structure:
typedef struct lm2_circle_f32 {
lm2_v2_f32 center;
float radius;
} lm2_circle_f32;
Functions:
| Function | Description |
|---|---|
lm2_circle_make_f32(center, radius) |
Create from center and radius |
lm2_circle_make_coords_f32(x, y, radius) |
Create from coordinates |
lm2_circle_unit_f32() |
Unit circle at origin |
lm2_circle_area_f32(c) |
Area |
lm2_circle_circumference_f32(c) |
Circumference |
lm2_circle_diameter_f32(c) |
Diameter |
lm2_circle_contains_point_f32(c, point) |
Point-in-circle test (returns bool) |
lm2_circles_overlap_f32(a, b) |
Circle-circle overlap (returns bool) |
lm2_circle_contains_circle_f32(a, b) |
Circle containment (returns bool) |
lm2_circle_translate_f32(c, offset) |
Translate circle |
lm2_circle_scale_f32(c, scale) |
Scale radius |
AABB2
2D axis-aligned bounding box. See lm2_aabb2.h.
Capsule2
A 2D capsule (rounded rectangle) defined by two endpoints and a radius. See lm2_capsule2.h.
Edge2
A 2D line segment defined by two endpoints. See lm2_edge2.h.
Plane2
A 2D plane (line) defined by normal and distance. See lm2_plane2.h.
Polygon
A 2D convex polygon. See lm2_polygon.h.
Triangle2
A 2D triangle with construction and property functions. See lm2_triangle2.h.
Additional triangle geometry functions (area, barycentric coordinates, circumcenter, incircle, etc.) in lm2_triangle2_geometry.h.
Shape2
A generic 2D shape container that can represent any of the above primitives. See lm2_shape2.h.
Raycasting
lm2_raycast2.h provides ray-shape intersection queries for 2D shapes.
Collision Manifolds
lm2_manifold2.h provides contact information for 2D collision pairs, including contact points, normals, and penetration depths.
Example
lm2_circle_f32 c = lm2_circle_make_coords_f32(0, 0, 5.0f);
lm2_v2_f32 point = lm2_v2_make_f32(3.0f, 4.0f);
bool inside = lm2_circle_contains_point_f32(c, point); // true (dist=5, radius=5)
float area = lm2_circle_area_f32(c); // ~78.54
```