init
This commit is contained in:
commit
d30f9ac56c
56 files changed
+40776
No files matched your search
@@ -0,0 +1,56 @@
|
||||
#include "spacetime.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct {
|
||||
double escape_radius;
|
||||
} MinkowskiContext;
|
||||
|
||||
static int minkowski_eval(const SpacetimeSource *source, double t,
|
||||
const double x[3], MetricData *metric) {
|
||||
(void)source;
|
||||
(void)t;
|
||||
(void)x;
|
||||
*metric = (MetricData){
|
||||
.alpha = 1.0,
|
||||
.gamma = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}};
|
||||
return 0;
|
||||
}
|
||||
|
||||
static SpacetimeRayStatus minkowski_classify(const SpacetimeSource *source,
|
||||
double t, const double x[3]) {
|
||||
const MinkowskiContext *context = source->context;
|
||||
const double radius_squared = x[0] * x[0] + x[1] * x[1] + x[2] * x[2];
|
||||
(void)t;
|
||||
return radius_squared >= context->escape_radius * context->escape_radius
|
||||
? SPACETIME_RAY_ESCAPED
|
||||
: SPACETIME_RAY_ACTIVE;
|
||||
}
|
||||
|
||||
static void minkowski_destroy(SpacetimeSource *source) {
|
||||
free(source->context);
|
||||
source->context = NULL;
|
||||
source->ops = NULL;
|
||||
}
|
||||
|
||||
static const SpacetimeOps minkowski_ops = {
|
||||
.eval = minkowski_eval,
|
||||
.classify = minkowski_classify,
|
||||
.destroy = minkowski_destroy,
|
||||
};
|
||||
|
||||
int spacetime_create_minkowski(SpacetimeSource *source, double escape_radius) {
|
||||
if (source == NULL || escape_radius <= 0.0)
|
||||
return -1;
|
||||
MinkowskiContext *context = malloc(sizeof *context);
|
||||
if (context == NULL)
|
||||
return -1;
|
||||
context->escape_radius = escape_radius;
|
||||
source->ops = &minkowski_ops;
|
||||
source->context = context;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int spacetime_create_default(SpacetimeSource *source) {
|
||||
return spacetime_create_minkowski(source, 1024.0);
|
||||
}
|
||||
Reference in new issue
Block a user