Skip to content
Snippets Groups Projects
Commit 71a7e27d authored by ftomi's avatar ftomi
Browse files

Segment init

parent 2413f26a
Branches
Tags
No related merge requests found
classdef Segment
properties
posStart double = 0;
posEnd double = 0;
powDens double = 0;
end
methods
function obj = Segment(posStart, posEnd, powDens)
if nargin == 0
obj.posStart = 0;
obj.posEnd = 0;
obj.powDens = 0;
elseif nargin == 1 %constructor from vector
obj.posStart = posStart(1);
obj.posEnd = posStart(2);
obj.powDens = 0;
elseif nargin == 2
obj.posStart = posStart;
obj.posEnd = posEnd;
obj.powDens = 0;
elseif nargin >= 3
obj.posStart = posStart;
obj.posEnd = posEnd;
obj.powDens = powDens;
end
if obj.posStart > obj.posEnd
tmp = obj.posStart;
obj.posStart = obj.posEnd;
obj.posEnd = tmp;
end
end
end
methods (Static)
function segments = split(seg1, seg2)
% seg1 before seg2 (if not, then swap)
if seg1.posStart > seg1.posStart
s = seg1;
seg1 = seg2;
seg2 = s;
end
segments = [];
if seg1.posEnd < seg2.posStart % no overlap
% |---|
% |---|
segments = [seg1, seg2];
elseif seg1.posEnd < seg2.posEnd
% |---|
% |---|
segments = [Segment(seg1.posStart, seg2.posStart, seg1.powDens), ...
Segment(seg2.posStart, seg1.posEnd, seg1.powDens + seg2.powDens), ...
Segment(seg1.posEnd, seg2.posEnd, seg2.powDens)];
else
% |-------|
% |---|
segments = [Segment(seg1.posStart, seg2.posStart, seg1.powDens), ...
Segment(seg2.posStart, seg2.posEnd, seg1.powDens + seg2.powDens), ...
Segment(seg2.posEnd, seg2.posEnd, seg2.powDens)];
end
% Segments that has 0 width are not needed.
% e.g.: |----|
% |--|
n = 1;
for k = 1:size(segments,2)
if segments(k).posStart < segments(k).posEnd
segments(n) = segments(k);
n = n + 1;
end
end
segments = segments(1:n-1);
end
end
end
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment