diff --git a/RTX class/Segment.m b/RTX class/Segment.m
new file mode 100644
index 0000000000000000000000000000000000000000..b75c205d5af1ba71ba0548ab694b2c0e7f29d52d
--- /dev/null
+++ b/RTX class/Segment.m	
@@ -0,0 +1,72 @@
+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