Skip to content
Snippets Groups Projects
Select Git revision
  • d992d96862ed96844db8347d0d2d65a1975b1a4e
  • master default
  • lecture_02-starter
  • lecture_02-final
  • lecture_03-starter
  • lecture_03-final
  • lecture_01-final
  • lecture_01-starter
8 results

01.md

Blame
  • PlaneReflector.m 1.18 KiB
    classdef PlaneReflector < Barrier
        properties
            center Vect = Vect; % center position
            size double = 0; % full size of reflector (end to end)
            color = 'k';
            width = 3;
        end
        methods
            function obj = PlaneReflector(center, size)
                if nargin == 2
                    obj.center = center;
                    obj.size = size;
                end
            end
            function col = collide(obj, ray) % override this function with custom collision
                col = Collision;
                col.stop = false;
                
                k = (obj.center.x - ray.start.x)/ray.dir.x;
                col.pos = ray.start + k*ray.dir;
                col.reflDir = Vect(-ray.dir.x, ray.dir.y);
                if abs(col.pos.y - obj.center.y) < obj.size/2 && k*ray.dir.mag > 1e-6
                    col.collided = true;
                else
                    col.collided = false;
                end
            end
            function post_collide(obj, col, trace)
            end
            function plot_self(obj)
                plot([obj.center.x obj.center.x],...
                    [obj.center.y - obj.size/2, obj.center.y + obj.size/2],...
                    'LineWidth', obj.width, 'Color', obj.color);
            end
        end
    end