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
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
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;
end
if nargin == 2
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
function p = plus(t,r)
p = Trace([t.rays r], t.init_phase);
end
function length = trace_end(obj)
......
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment