Add observer track PNG movie mode
This commit is contained in:
1 parent
d3dc2e5836
commit
c8b321a62a
10 files changed
+552
-33
No files matched your search
@@ -1,4 +1,5 @@
|
||||
#include "geodesic.h"
|
||||
#include "observer_track.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
@@ -38,6 +39,24 @@ int main(void) {
|
||||
result = result || check_ray(&source, &look_at_ra_zero,
|
||||
(double[]){1.0, 0.0, 0.0},
|
||||
(double[]){1.0, 0.0, 0.0});
|
||||
ObserverTrack accelerated = {0};
|
||||
ObserverState final_observer;
|
||||
if (observer_track_generate_minkowski_acceleration(&accelerated, 1.52, 2.0,
|
||||
1.0 / 30.0) ||
|
||||
observer_track_interpolate(&accelerated, 2.0, &final_observer, NULL)) {
|
||||
result = 1;
|
||||
} else {
|
||||
const RayEndpoint forward = geodesic_trace_past(
|
||||
&source, &final_observer, (double[]){1.0, 0.0, 0.0},
|
||||
&(GeodesicTraceConfig){.coordinate_time_step = 0.25, .max_steps = 100});
|
||||
const double expected_g = sqrt(1.0 + 3.04 * 3.04) + 3.04;
|
||||
if (forward.status != RAY_ENDPOINT_ESCAPED ||
|
||||
!nearly_equal(forward.frequency_ratio, expected_g)) {
|
||||
fputs("accelerated-observer Doppler regression failed\n", stderr);
|
||||
result = 1;
|
||||
}
|
||||
}
|
||||
observer_track_destroy(&accelerated);
|
||||
spacetime_destroy(&source);
|
||||
return result;
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
#include "movie.h"
|
||||
#include "observer_track.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <stdio.h>
|
||||
|
||||
static int nearly_equal(double a, double b) { return fabs(a - b) < 1e-12; }
|
||||
|
||||
int main(void) {
|
||||
const char *path = "/tmp/gr_raytracing_observer_track.csv";
|
||||
ObserverTrack generated = {0}, loaded = {0};
|
||||
Movie movie = {0};
|
||||
int result = 1;
|
||||
if (observer_track_generate_minkowski_acceleration(&generated, 1.52, 2.0,
|
||||
1.0 / 30.0) ||
|
||||
generated.count != 61 ||
|
||||
!nearly_equal(generated.samples[60].coordinate_time, 2.0) ||
|
||||
!nearly_equal(generated.samples[60].tetrad[0][0],
|
||||
sqrt(1.0 + 3.04 * 3.04)) ||
|
||||
observer_track_write_csv(&generated, path) ||
|
||||
observer_track_load_csv(&loaded, path) || loaded.count != generated.count ||
|
||||
movie_init(&movie, &loaded, 0.0, 2.0, 30.0) || movie.frame_count != 61 ||
|
||||
!nearly_equal(movie.frames[60].coordinate_time, 2.0) ||
|
||||
!nearly_equal(movie.frames[60].observer.tetrad[0][3], -3.04))
|
||||
goto done;
|
||||
ObserverState interpolated;
|
||||
double proper_time = 0.0;
|
||||
if (observer_track_interpolate(&loaded, 1.0, &interpolated, &proper_time) ||
|
||||
!nearly_equal(interpolated.coordinate_position[2],
|
||||
-(sqrt(1.0 + 1.52 * 1.52) - 1.0) / 1.52) ||
|
||||
!nearly_equal(proper_time, asinh(1.52) / 1.52))
|
||||
goto done;
|
||||
{
|
||||
FILE *bad = fopen(path, "w");
|
||||
ObserverTrack invalid = {0};
|
||||
if (bad == NULL)
|
||||
goto done;
|
||||
if (fputs("0,0,0\n", bad) < 0 || fclose(bad) != 0)
|
||||
goto done;
|
||||
if (observer_track_load_csv(&invalid, path) == 0) {
|
||||
observer_track_destroy(&invalid);
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
result = 0;
|
||||
done:
|
||||
movie_destroy(&movie);
|
||||
observer_track_destroy(&loaded);
|
||||
observer_track_destroy(&generated);
|
||||
remove(path);
|
||||
if (result)
|
||||
fputs("observer-track/movie regression failed\n", stderr);
|
||||
return result;
|
||||
}
|
||||
Reference in new issue
Block a user