ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/fprism.c
(Generate patch)

Comparing ray/src/rt/fprism.c (file contents):
Revision 2.1 by greg, Wed Sep 29 10:40:31 1993 UTC vs.
Revision 2.2 by greg, Mon Dec 12 12:22:48 1994 UTC

# Line 367 | Line 367 | TRAYON r_initial;
367  
368  
369  
370 + static int
371 + compare(r1,r2,marge)
372 + TRAYON r1, r2;
373 + double marge;
374  
375 + {
376 + double arctg1, arctg2;
377 +
378 + arctg1 = atan2(Y(r1),X(r1));
379 + arctg2 = atan2(Y(r2),X(r2));
380 + if ((arctg1 - marge <= arctg2) && (arctg1 + marge >= arctg2)) return 1;
381 + else return 0;
382 + }
383 +
384 +
385 +
386 +
387   static
388   sortie(r)
389   TRAYON r;
# Line 506 | Line 522 | TRAYON r_incident;
522  
523  
524  
509 static int
510 compare(r1,r2,marge)
511 TRAYON r1, r2;
512 double marge;
513
514 {
515 double arctg1, arctg2;
516
517 arctg1 = atan2(Y(r1),X(r1));
518 arctg2 = atan2(Y(r2),X(r2));
519 if ((arctg1 - marge <= arctg2) && (arctg1 + marge >= arctg2)) return 1;
520 else return 0;
521 }
522
523
524
525   #define ensuite(rayon,prob_passage,destination) r_suite = rayon; \
526                                   r_suite.e = prob_passage(rayon)*rayon.e; \
527                                   r_suite.dest = destination; \
# Line 633 | Line 633 | TRAYON *r1,*r2;
633  
634  
635  
636 static double
637 l_get_val()
638
639 {
640 int val, dir, i, trouve, curseur;
641 int nb;
642 double valeur;
643 TRAYON *rayt, raynull;
644
645 if (prismclock < 0 || prismclock < eclock) setprism();
646 if (bidon == BADVAL) {
647        errno = EDOM;
648        return(0.0);
649 }
650 val = (int)(argument(1) + .5);
651 dir = (int)(argument(2) + .5);
652 nb = (int)(argument(3) + .5);
653 X(raynull) = bidon;
654 Y(raynull) = Z(raynull) = 0.;
655 raynull.e = 0.;
656 trouve = curseur = 0;
657 if ( !nosource && nb==2 ) nb=1; /* on est en train de tracer la source
658                                     a partir de sa seconde source virtuelle */
659 #ifdef DEBUG
660 fprintf(stderr, " On considere le rayon no: %d\n", nb);
661 #endif
662 for(i=0; i < nbrayons &&!trouve; i++)
663  {
664   if(ray[i].v[0] * dir * sens >= 0.) curseur ++;
665   if(curseur == nb)
666   {
667    rayt = &ray[i];
668    trouve = 1;
669   }
670  }
671 if(!trouve) rayt = &raynull;
672 switch(val) {
673        case 0 : valeur = rayt->v[0];
674                 break;
675        case 1 : valeur = rayt->v[1];
676                 break;
677        case 2 : valeur = rayt->v[2];
678                 break;
679        case 3 : valeur = rayt->e;
680                 break;
681        default : errno = EDOM; return(0.0);
682    }
683 #ifdef DEBUG
684  fprintf(stderr, "get_val( %i, %i, %i) = %lf\n",val,dir,nb,valeur);
685 #endif
686  return valeur;
687 }
688
689
636   static
637   setprism()
692
638   {
639   double d;
640   TRAYON r_initial,rsource;
# Line 784 | Line 729 | if ( X(r_initial) != 0.)
729   bidon = BADVAL;
730   return;
731   }
732 +
733 +
734 + static double
735 + l_get_val()
736 +
737 + {
738 + int val, dir, i, trouve, curseur;
739 + int nb;
740 + double valeur;
741 + TRAYON *rayt, raynull;
742 +
743 + if (prismclock < 0 || prismclock < eclock) setprism();
744 + if (bidon == BADVAL) {
745 +        errno = EDOM;
746 +        return(0.0);
747 + }
748 + val = (int)(argument(1) + .5);
749 + dir = (int)(argument(2) + .5);
750 + nb = (int)(argument(3) + .5);
751 + X(raynull) = bidon;
752 + Y(raynull) = Z(raynull) = 0.;
753 + raynull.e = 0.;
754 + trouve = curseur = 0;
755 + if ( !nosource && nb==2 ) nb=1; /* on est en train de tracer la source
756 +                                     a partir de sa seconde source virtuelle */
757 + #ifdef DEBUG
758 + fprintf(stderr, " On considere le rayon no: %d\n", nb);
759 + #endif
760 + for(i=0; i < nbrayons &&!trouve; i++)
761 +  {
762 +   if(ray[i].v[0] * dir * sens >= 0.) curseur ++;
763 +   if(curseur == nb)
764 +   {
765 +    rayt = &ray[i];
766 +    trouve = 1;
767 +   }
768 +  }
769 + if(!trouve) rayt = &raynull;
770 + switch(val) {
771 +        case 0 : valeur = rayt->v[0];
772 +                 break;
773 +        case 1 : valeur = rayt->v[1];
774 +                 break;
775 +        case 2 : valeur = rayt->v[2];
776 +                 break;
777 +        case 3 : valeur = rayt->e;
778 +                 break;
779 +        default : errno = EDOM; return(0.0);
780 +    }
781 + #ifdef DEBUG
782 +  fprintf(stderr, "get_val( %i, %i, %i) = %lf\n",val,dir,nb,valeur);
783 + #endif
784 +  return valeur;
785 + }
786 +
787  
788   setprismfuncs()
789   {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines