static int find_delta_children(const union delta_base *base, int *first_index, int *last_index) { int first = find_delta(base); int last = first; int end = nr_deltas - 1; if (first < 0) return -1; while (first > 0 && !memcmp(&deltas[first - 1].base, base, UNION_BASE_SZ)) --first; while (last < end && !memcmp(&deltas[last + 1].base, base, UNION_BASE_SZ)) ++last; *first_index = first; *last_index = last; return 0; }
static void find_delta_children(const union delta_base *base, int *first_index, int *last_index, enum object_type type) { int first = find_delta(base, type); int last = first; int end = nr_deltas - 1; if (first < 0) { *first_index = 0; *last_index = -1; return; } while (first > 0 && !memcmp(&deltas[first - 1].base, base, UNION_BASE_SZ)) --first; while (last < end && !memcmp(&deltas[last + 1].base, base, UNION_BASE_SZ)) ++last; *first_index = first; *last_index = last; }
void calcul_cone(t_loop *data, t_info *cone, int i) { data->delta.a = pow(data->ray.vec_x, 2) + pow(data->ray.vec_z, 2) - pow(data->ray.vec_y, 2) * pow(tan(M_PI * cone->cone[i].angle / 180), 2); data->delta.b = (2 * (data->pos_x - cone->cone[i].pos_x) * data->ray.vec_x) + (2 * (data->pos_z - cone->cone[i].pos_z) * data->ray.vec_z) - (2 * (data->pos_y - cone->cone[i].pos_y) * data->ray.vec_y) * pow(tan(M_PI * cone->cone[i].angle / 180), 2); data->delta.c = pow(data->pos_x - cone->cone[i].pos_x, 2) + pow(data->pos_z - cone->cone[i].pos_z, 2) - pow(data->pos_y - cone->cone[i].pos_y, 2) * pow(tan(M_PI * cone->cone[i].angle / 180) , 2); data->delta.delta = pow(data->delta.b, 2) - 4 * data->delta.a * data->delta.c; if (find_delta(data) == 2) find_cone(data, i); }