Esempio n. 1
0
int		inter_cyl_shadow(t_object *obj, t_spobject *lum)
{
  t_inter	i;

  protate(lum, obj);
  obj->xrot *= -1;
  obj->yrot *= -1;
  obj->zrot *= -1;
  translate1(obj, lum);
  rotate(lum, obj);
  i.a = pow(lum->vx, 2) + pow(lum->vy, 2);
  i.b = 2 * (lum->x * lum->vx + lum->y * lum->vy);
  i.c = pow(lum->x, 2) + pow(lum->y, 2) - pow(obj->ray, 2);
  i.delta = i.b * i.b - 4 * i.a * i.c;
  i.k = (i.b - sqrt(i.delta)) / (2 * i.a);
  i.k2 = (i.b + sqrt(i.delta)) / (2 * i.a);
  translate2(obj, lum);
  punrotate(lum);
  unrotate(lum);
  obj->xrot *= -1;
  obj->yrot *= -1;
  obj->zrot *= -1;
  if (i.delta >= 0)
    if ((i.k2 < 0.9999 && i.k2 > 0.00001) || (i.k < 0.9999 && i.k > 0.00001))
      return (-1);
  return (0);
}
Esempio n. 2
0
int		inter_cone_shadow(t_object *obj, t_spobject *lum)
{
  t_inter	i;

  protate(lum, obj);
  translate1(obj, lum);
  obj->xrot *= -1;
  obj->yrot *= -1;
  obj->zrot *= -1;
  rotate(lum, obj);
  i.d = 0;
  if (cos(obj->angle) != 0)
    i.d = sin(obj->angle) / cos(obj->angle);
  i.a = pow(lum->vx, 2) + pow(lum->vy, 2) - pow(lum->vz, 2) * pow(i.d, 2);
  i.b = 2 * (lum->x * lum->vx + lum->y * lum->vy -
	     (lum->z * (lum->vz) * pow(i.d, 2)));
  i.c = pow(lum->x, 2) + pow(lum->y, 2) - pow(lum->z, 2) * pow(i.d, 2);
  i.delta = i.b * i.b - 4 * i.a * i.c;
  i.k = (i.b - sqrt(i.delta)) / (2 * i.a);
  i.k2 = (i.b + sqrt(i.delta)) / (2 * i.a);
  translate2(obj, lum);
  punrotate(lum);
  unrotate(lum);
  obj->xrot *= -1;
  obj->yrot *= -1;
  obj->zrot *= -1;
  return (inter_cone_shadow_delta(&i));
}
Esempio n. 3
0
int		inter_plan_shadow(t_object *obj, t_spobject *lum)
{
  double	k;

  protate(lum, obj);
  translate1(obj, lum);
  obj->xrot *= -1;
  obj->yrot *= -1;
  obj->zrot *= -1;
  rotate(lum, obj);
  obj->xrot *= -1;
  obj->yrot *= -1;
  obj->zrot *= -1;
  k = lum->z / lum->vz;
  translate2(obj, lum);
  punrotate(lum);
  unrotate(lum);
  if (k < 0.9999 && k > 0.00001)
    return (-1);
  return (0);
}
Esempio n. 4
0
 void rotate(vector<int>& nums, int k) {
     auto n=nums.size();
     protate(nums,0,n-k-1);
     protate(nums,n-k,n-1);
     protate(nums,0,n-1);
 }