void ft_burningship(t_fractol *e) { double tmp; tmp = 0; e->zr = (e->x - e->x1 / 2) / e->zoom - 0.5; e->zi = (e->y - e->y1 / 2) / e->zoom - 0.5; e->cr = e->zr; e->ci = e->zi; e->i = 0; while (e->zr * e->zr + e->zi * e->zi < 4 && e->i < e->iter_max) { tmp = e->zr; e->zr = e->zr * e->zr - e->zi * e->zi + e->cr; e->zi = 2 * fabs(tmp * e->zi) + e->ci; e->i++; } if (e->i == e->iter_max) ft_inside(e); else ft_outside(e); }
void ft_douady(t_fractol *e) { double tmp; tmp = 0; e->zr = (e->x - e->x1 / 2) / e->zoom; e->zi = (e->y - e->y1 / 2) / e->zoom; e->cr = -0.123; e->ci = 0.745; e->i = 0; while (e->zr * e->zr + e->zi * e->zi < 4 && e->i < e->iter_max) { tmp = e->zr; e->zr = e->zr * e->zr - e->zi * e->zi + e->cr; e->zi = 2 * tmp * e->zi + e->ci; e->i++; } if (e->i == e->iter_max) ft_inside(e); else ft_outside(e); }
static float ft_dist_sph(t_sph sph, t_ray *ray, int i) { float a[4]; float *tmp; float ret; ray->o_dneg[1 * MAX_OBJ + i] = 0; tmp = ft_vec_min(ray->o, sph.c); a[0] = ray->v[1] * ray->v[1] + ray->v[2] * ray->v[2] + ray->v[0] * ray->v[0]; a[1] = ft_sph_b(ray->v, tmp); a[2] = ft_sph_c(tmp, sph); free(tmp); a[3] = a[1] * a[1] - 4 * a[0] * a[2]; ret = ((-a[1] - sqrtf(a[3])) / (2 * a[0])); if (a[3] < 0) return (D_MAX); if (ray->opt_f == 1 && sqrtf(a[3]) < ray->delta && ret >= 0) ray->d_d[1 * MAX_OBJ + i] = 1; else ray->d_d[1 * MAX_OBJ + i] = 0; return (ft_inside(ray, a, ret, i)); }