diff --git a/RTX class/Ray.m b/RTX class/Ray.m index c017f32489c6f66963a7d6f19e0dcd2c9036acae..df985ce10b8154f16cb82afa26a8ba8eac0d4b42 100644 --- a/RTX class/Ray.m +++ b/RTX class/Ray.m @@ -10,39 +10,5 @@ classdef Ray obj.dir = dir; end end - function t = trace(obj, barriers, maxCol) - t = Trace(obj); - ncol = 0; - for m = 1:maxCol - col = Collision; - col.collided = false; - dist = +Inf; - col_barrier = 1; - for k = 1:size(barriers,2) - c = barriers(k).collide(t.rays(ncol+1)); % get collision from the 'k'th barrier - if (c.collided) - d = Vect.abs(c.pos - obj.start); - if d < dist - dist = d; - col = c; - col_barrier = k; - end - end - end - if col.collided - ncol = ncol + 1; - next_ray = Ray(col.pos, col.reflDir); - t = t + next_ray; - barriers(col_barrier).post_collide(col); - if col.stop - t.trace_end(); - %Nem tudom ez mire való: rays(m+1).dir = Vect; - break; - end - else - break; - end - end - end end end diff --git a/RTX class/Trace.m b/RTX class/Trace.m index 3c5a8cd1cf8f8b1971796b65fb491729714955c1..fb0b15c2e13bfa1779fd872f4aa163afc3649326 100644 --- a/RTX class/Trace.m +++ b/RTX class/Trace.m @@ -1,6 +1,8 @@ classdef Trace < handle properties + id; + wavelength; rays Ray = []; length = +inf; init_phase = 0; @@ -8,20 +10,42 @@ classdef Trace < handle end methods - function obj = Trace(rays, init_phase) - if isvector(rays) - obj.rays = rays; - return - else - obj.rays(1) = rays; + function obj = Trace(id, init_ray, init_phase, wavelength, barriers, maxCol) + obj.id = id; + obj.rays(1) = init_ray; + obj.init_phase = init_phase; + obj.wavelength = wavelength; + + ncol = 0; + for m = 1:maxCol + col = Collision; + col.collided = false; + dist = +Inf; + col_barrier = 1; + for k = 1:size(barriers,2) + c = barriers(k).collide(obj.rays(ncol+1)); % get collision from the 'k'th barrier + if (c.collided) + d = Vect.abs(c.pos - init_ray.start); + if d < dist + dist = d; + col = c; + col_barrier = k; + end + end + end + if col.collided + ncol = ncol + 1; + next_ray = Ray(col.pos, col.reflDir); + obj.rays(end+1) = next_ray; + barriers(col_barrier).post_collide(col); + if col.stop + obj.trace_end(); + break; + end + else + break; + end end - if nargin == 2 - obj.init_phase = init_phase; - end - end - - function p = plus(t,r) - p = Trace([t.rays r], t.init_phase); end function length = trace_end(obj) diff --git a/RTX class/simclass_test.m b/RTX class/simclass_test.m index 4daa74a9133c0362282a985ea147fcdbcfb9760c..c9ba0752fe8d965b650dfa019b14d51369b28af9 100644 --- a/RTX class/simclass_test.m +++ b/RTX class/simclass_test.m @@ -17,8 +17,8 @@ figure(1); plot(0, 0); hold on; for k = 1:n_ray - t = rays(k).trace(reflectors, 5); - %t.plot_trace(); + t = Trace(k, rays(k), 0, wavelength, reflectors, 5); + t.plot_trace(); end plot(start.x, start.y, 'kO', 'MarkerSize', 10); for k = 1:size(reflectors, 2)