diff options
| author | XANTRONIX Development | 2022-02-22 12:34:28 -0500 | 
|---|---|---|
| committer | XANTRONIX Development | 2022-02-22 12:34:28 -0500 | 
| commit | 08664e8d3f22e7d2885bef930f696e33c88827d6 (patch) | |
| tree | 1e6119a46e62076bd46dd2d2563a49427727ad28 | |
| parent | 8a3be441021b006c5e913141daf9c20b8ade9450 (diff) | |
| download | xas-08664e8d3f22e7d2885bef930f696e33c88827d6.tar.gz xas-08664e8d3f22e7d2885bef930f696e33c88827d6.tar.bz2 xas-08664e8d3f22e7d2885bef930f696e33c88827d6.zip | |
Holy shit we're in business
| -rw-r--r-- | include/xas/spatial.h | 4 | ||||
| -rw-r--r-- | src/spatial.c | 37 | 
2 files changed, 20 insertions, 21 deletions
| diff --git a/include/xas/spatial.h b/include/xas/spatial.h index e888f7b..6ad2675 100644 --- a/include/xas/spatial.h +++ b/include/xas/spatial.h @@ -13,8 +13,8 @@ typedef struct _xas_spatial_coord {  } xas_spatial_coord;  typedef struct _xas_spatial_cone { -    xas_spatial_coord coord, -                        rotation; +    xas_spatial_coord apex, +                        base;      float angle;  } xas_spatial_cone; diff --git a/src/spatial.c b/src/spatial.c index 791c6f9..4a93fdd 100644 --- a/src/spatial.c +++ b/src/spatial.c @@ -78,14 +78,23 @@ static void rotate(xas_spatial_coord rotation,  static int within_cone(xas_spatial_coord coord,                         xas_spatial_cone cone) { -    xas_spatial_coord apex_to_x; +    xas_spatial_coord apex_to_x_vect, +                        axis_vect; -    float cosf_angle = cosf(cone.angle / 2.0f); +    int is_infinite; -    diff(&apex_to_x, cone.coord, coord); +    diff(&apex_to_x_vect, cone.apex, coord); +    diff(&axis_vect,      cone.apex, cone.base); -    return dotf(apex_to_x, cone.rotation) / magnf(apex_to_x) / magnf(cone.rotation) -      > cosf_angle; +    is_infinite = dotf(apex_to_x_vect, axis_vect) +                / magnf(apex_to_x_vect) +                / magnf(axis_vect) > cosf(cone.angle / 2.0f); + +    if (!is_infinite) { +        return 0; +    } + +    return dotf(apex_to_x_vect, axis_vect) / magnf(axis_vect) < magnf(axis_vect);  }  static int buffer_realloc(xas_spatial_scene *scene, @@ -177,22 +186,12 @@ ssize_t scene_fill(xas_spatial_scene *scene,      int16_t *dest = (int16_t *)(scene->buffer + 1);      xas_spatial_cone cone_l = { -        .coord    = scene->speaker_l, -        .rotation = { -            .x = 0.0f, -            .y = 0.5f * M_PI, -            .z = 0.0f -        }, - +        .apex  = scene->speaker_l, +        .base  = { scene->speaker_l.x - 20.0f, scene->speaker_l.y, scene->speaker_l.z },          .angle = M_PI / 4.0f      }, cone_r = { -        .coord    = scene->speaker_r, -        .rotation = { -            .x = 0.0f, -            .y = 1.5f * M_PI, -            .z = 0.0f -        }, - +        .apex  = scene->speaker_r, +        .base  = { scene->speaker_r.x + 20.0f, scene->speaker_r.y, scene->speaker_r.z },          .angle = M_PI / 4.0f      }; | 
 
    