diff --git a/ShoulderCase/@Vector/Vector.m b/ShoulderCase/@Vector/Vector.m index 39bb6cb..c1dcc83 100644 --- a/ShoulderCase/@Vector/Vector.m +++ b/ShoulderCase/@Vector/Vector.m @@ -1,74 +1,94 @@ classdef Vector < handle properties origin target end methods function obj = Vector(origin, target) obj.origin = origin; obj.target = target; end function set.origin(obj, value) assert(isequal(size(value),[1,3]),"Origin must be a 1x3 double array") obj.origin = value; end function set.target(obj, value) assert(isequal(size(value),[1,3]),"Target must be a 1x3 double array") obj.target = value; end function output = points(obj) output = [obj.origin; obj.target]; end function output = vector(obj) output = obj.target - obj.origin; end function output = norm(obj) output = norm(obj.vector); end function output = direction(obj) output = obj.vector / obj.norm; end + function output = project(obj, projectedElement) + % projectedElement must be either a point in 3D space (1x3 double array) + % or another Vector. + if isequal(class(projectedElement),"Vector") + projectedVector = projectedElement; + elseif isequal(size(projectedElement),[1,3]) + projectedVector = Vector(obj.origin, projectedElement); + end + output = Vector(obj.origin, obj.origin + obj.direction*dot(projectedVector.vector,obj.direction)); + end + + function output = orthogonalComplementToPoint(obj, point) + output = -obj.project(point) + Vector(obj.origin, point); + end + + function plot(obj) + points = obj.points; + plot3(points(:,1), points(:,2), points(:,3)); + end + function output = uminus(obj) output = Vector(obj.target, obj.origin); end function output = plus(obj, addedVector) if isequal(class(addedVector),"Vector") output = Vector(obj.origin, obj.target + addedVector.vector); elseif isequal(size(addedVector),[1,3]) output = Vector(obj.origin, obj.target + addedVector); end end function output = minus(obj, substractedVector) if isequal(class(substractedVector),"Vector") output = obj + -substractedVector; elseif isequal(size(substractedVector),[1,3]) output = Vector(obj.origin, obj.origin - substractedVector); end end function output = mtimes(left,right) if isequal(class(left),"Vector") vectorObject = left; coefficient = right; else vectorObject = right; coefficient = left; end output = Vector(vectorObject.origin, vectorObject.origin + coefficient*vectorObject.vector); end end end \ No newline at end of file