예제 #1
0
static void	my_check(t_btree **root, t_btree **n, t_btree *add,
		int is_parent_at_left)
{
	t_btree	*y;

	if (is_parent_at_left)
		y = (*n)->parent->parent->right;
	else
		y = (*n)->parent->parent->left;
	if (y && y->color == RB_RED)
	{
		y->color = RB_BLACK;
		(*n)->parent->color = RB_BLACK;
		(*n)->parent->parent->color = RB_RED;
		*n = (*n)->parent->parent;
	}
	else
	{
		if ((is_parent_at_left && (*n == (*n)->parent->right))
			|| (!is_parent_at_left && add == (*n)->parent->left))
		{
			*n = (*n)->parent;
			my_rotate(root, *n, is_parent_at_left);
		}
		(*n)->parent->color = RB_BLACK;
		(*n)->parent->parent->color = RB_RED;
		my_rotate(root, (*n)->parent->parent, !is_parent_at_left);
	}
}
예제 #2
0
파일: light.c 프로젝트: Xelatr/Rtv1
void		check_obj(t_rtv *rtv, t_coord *light,
			  double norme[3])
{
  if (rtv->color == SPHERE)
    {
      norme[0] = light->xo - rtv->sph.tab[rtv->obj][1];
      norme[1] = light->yo - rtv->sph.tab[rtv->obj][2];
      norme[2] = light->zo - rtv->sph.tab[rtv->obj][3];
    }
  else if (rtv->color == CYLINDR)
    {
      my_rotate(light, rtv->cyl.tab[rtv->obj][4], rtv->cyl.tab[rtv->obj][5],
      		rtv->cyl.tab[rtv->obj][6]);
      norme[0] = light->xo - rtv->cyl.tab[rtv->obj][1];
      norme[1] = light->yo - rtv->cyl.tab[rtv->obj][2];
      my_rotate(light, rtv->cyl.tab[rtv->obj][4], rtv->cyl.tab[rtv->obj][5],
      		rtv->cyl.tab[rtv->obj][6]);
    }
  else if (rtv->color == CONE)
    {
      my_rotate(light, rtv->cone.tab[rtv->obj][4], rtv->cone.tab[rtv->obj][5],
      		rtv->cone.tab[rtv->obj][6]);
      norme[0] = light->xo - rtv->cone.tab[rtv->obj][1];
      norme[1] = light->yo - rtv->cone.tab[rtv->obj][2];
      my_rotate(light, rtv->cone.tab[rtv->obj][4], rtv->cone.tab[rtv->obj][5],
      		rtv->cone.tab[rtv->obj][6]);
    }
}
예제 #3
0
int		my_init2(int *pile1, int *pile2, int *s, int r[3][5])
{
	r[1][0] = my_swap(pile1, s[1], 1);
	r[1][1] = my_rotate(pile1, s[1], 1);
	r[1][2] = my_reverse(pile1, s[1], 1);
	r[2][0] = my_swap(pile2, s[2], -1);
	r[2][1] = my_rotate(pile2, s[2], -1);
	r[2][2] = my_reverse(pile2, s[2], -1);
	return (1);
}
예제 #4
0
파일: main.c 프로젝트: Docteur-RS/Push-swap
int		main(int argc, char **argv)
{
  static t_list	*mapile = NULL;
  static t_list	*stack2 = NULL;
  static t_list	*lc = NULL;
  t_var	var;

  var.i = 1;
  while (argv[var.i])
    {
      my_push(&mapile, my_getnbr(argv[var.i]));
      var.i = var.i + 1;
    }
  my_reverse_doc(&mapile);
  while (my_is_empty(mapile) != -1)
    {
      var.len = my_length(mapile);
      var.nb = my_min_doc(mapile, stack2, &var.pos);
      while (var.pos != 0)
	{
	  my_rotate(&mapile);
	  my_var_ini(&var.i, &var.pos, 1, mapile);
	}
      my_delete_first(&mapile, &stack2);
      my_var_ini(&var.i, &var.pos, 2, mapile);
    }
  my_putchar('\n');
}