diff --git a/RTX class/BalazsAperture.m b/RTX class/BalazsAperture.m index 32263f44b52c6a51b282ff058910756591ea991d..6c08f79145b357530a32b1b7a800fb664e23fee5 100644 --- a/RTX class/BalazsAperture.m +++ b/RTX class/BalazsAperture.m @@ -32,10 +32,11 @@ classdef BalazsAperture < Barrier function histogram = getCollisionHistogram(obj) %change from original histogram = obj.collisions; end - function post_collide(obj, col) + function post_collide(obj, col, trace) if (col.collided) %change from original i = floor(obj.nslice*(col.pos.y-obj.center.y+obj.size/2)/obj.size) + 1; - obj.collisions(i) = obj.collisions(i) + 1; + phase = trace.init_phase + 2*pi * mod(trace.length, trace.wavelength)/trace.wavelength; + obj.collisions(i) = obj.collisions(i) + exp(1i*phase); end end function plot_self(obj) diff --git a/RTX class/Barrier.m b/RTX class/Barrier.m index 837aa3f44022b45c456bc995824a95b000ff21b9..02fb51c5a197d5d42a832fad59a3ef1d03411181 100644 --- a/RTX class/Barrier.m +++ b/RTX class/Barrier.m @@ -1,7 +1,7 @@ classdef (Abstract) Barrier < matlab.mixin.Heterogeneous & handle methods (Abstract) collide(obj, ray) % override this function with custom collision - post_collide(obj, col) + post_collide(obj, col, trace) plot_self(obj) end diff --git a/RTX class/ParabolaReflector.m b/RTX class/ParabolaReflector.m index 8156d2d771cf69ea6a7a21b5176666dfa65c2b75..646325652e5193e6acae6f400b75b98a6b6c3341 100644 --- a/RTX class/ParabolaReflector.m +++ b/RTX class/ParabolaReflector.m @@ -36,7 +36,7 @@ classdef ParabolaReflector < Barrier end end end - function post_collide(obj, col) + function post_collide(obj, col, trace) end function plot_self(obj) pri_y = -obj.diameter/2:obj.diameter/2000:obj.diameter/2; diff --git a/RTX class/PlaneReflector.m b/RTX class/PlaneReflector.m index 4d33c6d1779a443aa78114bc92f3acd32d3c2da6..0397d486c32c6bf5f542458545589eed721f3f5f 100644 --- a/RTX class/PlaneReflector.m +++ b/RTX class/PlaneReflector.m @@ -25,7 +25,7 @@ classdef PlaneReflector < Barrier col.collided = false; end end - function post_collide(obj, col) + function post_collide(obj, col, trace) end function plot_self(obj) plot([obj.center.x obj.center.x],... diff --git a/RTX class/Trace.m b/RTX class/Trace.m index fb0b15c2e13bfa1779fd872f4aa163afc3649326..b1e98d7a5690299802b2f3251cebbe0f15db4d7d 100644 --- a/RTX class/Trace.m +++ b/RTX class/Trace.m @@ -37,7 +37,7 @@ classdef Trace < handle ncol = ncol + 1; next_ray = Ray(col.pos, col.reflDir); obj.rays(end+1) = next_ray; - barriers(col_barrier).post_collide(col); + barriers(col_barrier).post_collide(col, obj); if col.stop obj.trace_end(); break; diff --git a/RTX class/simclass_test.m b/RTX class/simclass_test.m index fc71a75983ce8c8aa4c9e27c34130f99a60175f4..83781d8d67981af35fb552337498ac4d59f77306 100644 --- a/RTX class/simclass_test.m +++ b/RTX class/simclass_test.m @@ -5,7 +5,7 @@ reflectors(end+1) = BalazsAperture([3 0], 20, 1000); phi_start = -pi; phi_stop = pi; -n = 1000; +n = 10000; wavelength = 3e8/1e9; antenna = Antenna(Vect(1,0));