diff --git a/RTX class/Antenna.m b/RTX class/Antenna.m index 94f8017fcc71660adda1d4fa5d1baecca13cb708..c69390ec8374a8e6dd6fe7f90beecdc99c32f9a2 100644 --- a/RTX class/Antenna.m +++ b/RTX class/Antenna.m @@ -21,6 +21,17 @@ classdef Antenna end complex_amplitudes = obj.get_complex_amplitudes(phi); end + + function rays = generateRaysB(obj, nRay) + phi = linspace(0, 2*pi, length(obj.amplitude)); + randArray = rand(1, nRay); + for j=1:nRay + minval = min(abs(obj.integral - randArray(j)*obj.integral(end))); + phiIndex = find(abs(obj.integral - randArray(j)*obj.integral(end)) == minval, 1, 'last'); + phiRay = phi(phiIndex); + rays(j) = Ray(obj.position, [cos(phiRay), sin(phiRay)], obj.phase(phiIndex)); + end + end function plot_characteristics(obj) phi = linspace(0,2*pi,1000); diff --git a/RTX class/Ray.m b/RTX class/Ray.m index df985ce10b8154f16cb82afa26a8ba8eac0d4b42..ced16c0d423a1497af364e2a72eac25977923e5e 100644 --- a/RTX class/Ray.m +++ b/RTX class/Ray.m @@ -2,12 +2,14 @@ classdef Ray properties start Vect = Vect; dir Vect = Vect; + initPhase = 0; end methods - function obj = Ray(start, dir) - if nargin == 2 %constructor from 2 vectors - obj.start = start; - obj.dir = dir; + function obj = Ray(start, dir, initPhase) + obj.start = start; + obj.dir = dir; + if nargin == 3 + obj.initPhase = initPhase; end end end diff --git a/RTX class/Trace.m b/RTX class/Trace.m index f9e493c0b8960310f210e36cb5baefe9408ca9b4..78371276182ec2894fc8435725b534c48936a9d3 100644 --- a/RTX class/Trace.m +++ b/RTX class/Trace.m @@ -10,10 +10,10 @@ classdef Trace < handle end methods - function obj = Trace(id, init_ray, init_phase, wavelength, barriers, maxCol) + function obj = Trace(id, init_ray, wavelength, barriers, maxCol) obj.id = id; obj.rays(1) = init_ray; - obj.init_phase = init_phase; + obj.init_phase = init_ray.initPhase; obj.wavelength = wavelength; ncol = 0; @@ -56,16 +56,20 @@ classdef Trace < handle length = obj.length; end - function plot_trace(obj, color, linewidth) - if nargin < 3 + function plot_trace(obj, stop, color, linewidth) + if nargin < 4 linewidth = 1; end + if nargin < 3 + color = 'r'; + end if nargin < 2 - color = 'r'; + stop = size(obj.rays,2); end - x = zeros(1,size(obj.rays, 2)); - y = zeros(1,size(obj.rays, 2)); - for k = 1:size(obj.rays,2) + stop = min([stop size(obj.rays,2)]); + x = zeros(1,stop); + y = zeros(1,stop); + for k = 1:stop x(k) = obj.rays(k).start.x; y(k) = obj.rays(k).start.y; end diff --git a/RTX class/simclass_test.m b/RTX class/simclass_test.m index 83781d8d67981af35fb552337498ac4d59f77306..76a1c659c585bb71c993f7106f45708b91e8cbae 100644 --- a/RTX class/simclass_test.m +++ b/RTX class/simclass_test.m @@ -1,3 +1,4 @@ +clear reflectors = PlaneReflector.empty; reflectors(end+1) = PlaneReflector([2 0], 2); reflectors(end+1) = ParabolaReflector([0 0], 4, 3); @@ -5,18 +6,24 @@ reflectors(end+1) = BalazsAperture([3 0], 20, 1000); phi_start = -pi; phi_stop = pi; -n = 10000; +n = 100000; wavelength = 3e8/1e9; -antenna = Antenna(Vect(1,0)); -[rays, complex_amplitudes] = antenna.generate_rays(linspace(phi_start, phi_stop, n)); +antenna = Antenna(Vect(1,0), [ones(1,125), zeros(1,750), ones(1,125)], zeros(1,1000)); +rays = antenna.generateRaysB(n); +disp([num2str(n) ' rays generated!']); figure(1); plot(0, 0); hold on; -for k = 1:size(rays, 2) - t = Trace(k, rays(k), 0, wavelength, reflectors, 5); - %t.plot_trace(); + +for k = 1:size(rays, 2) + traces(k) = Trace(k, rays(k), wavelength, reflectors, 5); + if mod(k, 5000) == 0 + clc; + disp([num2str(k/n*100) '%']); + end + traces(k).plot_trace(3); end antenna.plot_antenna(); for k = 1:size(reflectors, 2)