Example #1
0
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);
}
Example #2
0
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);
}
Example #3
0
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));
}