From 5dfe37ddb7d167b9f94a2158ad4337a32206c8d2 Mon Sep 17 00:00:00 2001
From: lmaresz <lmaresz@sch.bme.hu>
Date: Tue, 9 Jun 2020 00:23:55 +0200
Subject: [PATCH] Created new ray gen. method; Trace modifications

---
 RTX class/Antenna.m       | 11 +++++++++++
 RTX class/Ray.m           | 10 ++++++----
 RTX class/Trace.m         | 20 ++++++++++++--------
 RTX class/simclass_test.m | 19 +++++++++++++------
 4 files changed, 42 insertions(+), 18 deletions(-)

diff --git a/RTX class/Antenna.m b/RTX class/Antenna.m
index 94f8017..c69390e 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 df985ce..ced16c0 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 f9e493c..7837127 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 83781d8..76a1c65 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)
-- 
GitLab