Skip to content
Snippets Groups Projects
Commit 69f6081e authored by lmaresz's avatar lmaresz
Browse files

Modified Trace, Ray class

parent beb56ecc
No related branches found
No related tags found
No related merge requests found
...@@ -10,39 +10,5 @@ classdef Ray ...@@ -10,39 +10,5 @@ classdef Ray
obj.dir = dir; obj.dir = dir;
end end
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
end end
classdef Trace < handle classdef Trace < handle
properties properties
id;
wavelength;
rays Ray = []; rays Ray = [];
length = +inf; length = +inf;
init_phase = 0; init_phase = 0;
...@@ -8,20 +10,42 @@ classdef Trace < handle ...@@ -8,20 +10,42 @@ classdef Trace < handle
end end
methods methods
function obj = Trace(rays, init_phase) function obj = Trace(id, init_ray, init_phase, wavelength, barriers, maxCol)
if isvector(rays) obj.id = id;
obj.rays = rays; obj.rays(1) = init_ray;
return
else
obj.rays(1) = rays;
end
if nargin == 2
obj.init_phase = init_phase; 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
end end
function p = plus(t,r)
p = Trace([t.rays r], t.init_phase);
end end
function length = trace_end(obj) function length = trace_end(obj)
......
...@@ -17,8 +17,8 @@ figure(1); ...@@ -17,8 +17,8 @@ figure(1);
plot(0, 0); plot(0, 0);
hold on; hold on;
for k = 1:n_ray for k = 1:n_ray
t = rays(k).trace(reflectors, 5); t = Trace(k, rays(k), 0, wavelength, reflectors, 5);
%t.plot_trace(); t.plot_trace();
end end
plot(start.x, start.y, 'kO', 'MarkerSize', 10); plot(start.x, start.y, 'kO', 'MarkerSize', 10);
for k = 1:size(reflectors, 2) for k = 1:size(reflectors, 2)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment