aboutsummaryrefslogtreecommitdiff
path: root/beam_trace.m
diff options
context:
space:
mode:
Diffstat (limited to 'beam_trace.m')
-rw-r--r--beam_trace.m31
1 files changed, 31 insertions, 0 deletions
diff --git a/beam_trace.m b/beam_trace.m
new file mode 100644
index 0000000..401391a
--- /dev/null
+++ b/beam_trace.m
@@ -0,0 +1,31 @@
+function ret = beam_trace(beams, faces, borders)
+ %% trace beam and all it reflections and refractions on faces
+ % for beams and faces structure description see face_beam_interaction.m
+ % border similar to faces cell array which enclose the beam
+ % i.e. it does not leave the polygon consisting of border faces
+
+ Nbeams=size(beams)(2);
+ if ( Nbeams == 0 )
+ % no more beam to trace
+ return;
+ end
+
+ % trace each beam in beams cell array
+ for i=1:Nbeams
+ beam=beams{i};
+ [is_face_hit, hit_position, hit_distance, new_beams] = face_beam_interaction(beam, faces);
+ if (is_face_hit)
+ beam_trace(new_beams, faces, borders );
+ continue;
+ end
+
+ % beam does not hit face but it should stop and borders
+ beam.face=NA;
+ [is_face_hit, hit_position, hit_distance, new_beams] = face_beam_interaction(beam, borders);
+ if (!is_face_hit)
+ error('borders are badly defined, the beam misses them');
+ end
+ end
+end
+
+