diff --git a/main.c b/main.c index c7eb81c..caf9993 100644 --- a/main.c +++ b/main.c @@ -150,13 +150,20 @@ void setup_camera_scene() // struct object white_sphere = new_box(new_vec3(-0.75, 0, 8), 0, 1); // struct object other_white_sphere = new_sphere(new_vec3(0.75, 0, 8), 0, 1); - struct object* tree = new_tree(new_vec3(0, 0, 5), 0, 1); - - struct object* scene_objects = malloc(2 * sizeof(struct object)); - scene_objects[0] = tree[0]; - scene_objects[1] = tree[1]; + const double lower_pos_bound = -5; + const double upper_pos_bound = -5; + const int num_trees = 4; + struct object* scene_objects = malloc(2 * num_trees * sizeof(struct object)); + for (int i = 0; i < 2 * num_trees; i+=2) { + struct vec* random_pos = new_random_vec(3, lower_pos_bound, upper_pos_bound); + random_pos->elements[1] = 0; + + struct object* tree = new_tree(random_pos, 0, 1); + scene_objects[i] = tree[0]; + scene_objects[i + 1] = tree[1]; + } - scene_object = new_scene(2, scene_objects); + scene_object = new_scene(2 * num_trees, scene_objects); scene_object->sol.pos.dimension = 3; scene_object->sol.pos.elements = camera->pos->elements; } diff --git a/vect.c b/vect.c index 51c0e65..67da1bb 100644 --- a/vect.c +++ b/vect.c @@ -19,6 +19,18 @@ new_vec(int num_dimensions) return new_vector; } +struct vec* +new_random_vec(int num_dimensions, double min, double max) +{ + struct vec* new_vector = new_vec(num_dimensions); + for (int i = 0; i < num_dimensions; i++) { + double rand_val = (double) rand() / RAND_MAX; + new_vector->elements[i] = min + rand_val * (max - min); + } + + return new_vector; +} + struct vec* do_on_vec_ip(struct vec * v, double (*func)(double)) { for (int i = 0; i < v->dimension; i++) { @@ -545,4 +557,3 @@ perpendicular_vec(int num_vectors, struct vec** vectors) return perpendicular; } - diff --git a/vect.h b/vect.h index 9dd2ac0..6f21664 100644 --- a/vect.h +++ b/vect.h @@ -26,6 +26,7 @@ struct mat2 { }; struct vec* new_vec(int num_dimensions); +struct vec* new_random_vec(int num_dimensions, double min, double max); struct vec* new_vec_of(int num_dimensions, double value); void free_vec(struct vec*);