Wall_Line class
Contents
Description
This is a sub-class of the Wall class for the implementation of Line rigid walls.
classdef Wall_Line < Wall
Public properties
properties (SetAccess = public, GetAccess = public) % Position coord_ini double = double.empty; % coordinates of initial point coord_end double = double.empty; % coordinates of final point % Geometric properties len double = double.empty; % length of line end
Constructor method
methods function this = Wall_Line() this = this@Wall(Wall.LINE); this.setDefaultProps(); end end
Public methods: implementation of super-class declarations
methods %------------------------------------------------------------------ function setDefaultProps(this) % Behavior flags this.fixed_motion = false; this.fixed_therm = false; this.insulated = false; % Mechanical state variables this.veloc_trl = [0;0]; this.veloc_rot = 0; % Thermal state variables this.temperature = 0; end %------------------------------------------------------------------ function setFCMotion(this,time,dt) this.veloc_trl = [0;0]; this.veloc_rot = 0; if (~this.fixed_motion) return; end % Translation coord_mid = (this.coord_ini+this.coord_end)/2; for i = 1:length(this.fc_translation) if (this.fc_translation(i).isActive(time)) vel = this.fc_translation(i).getValue(time); % Velocity this.veloc_trl = this.veloc_trl + vel; % Mid-point coodinates coord_mid = coord_mid + vel * dt; end end % Rotation ang = atan2((this.coord_end(2)-this.coord_ini(2)),((this.coord_end(1)-this.coord_ini(1)))); for i = 1:length(this.fc_rotation) if (this.fc_rotation(i).isActive(time)) vel = this.fc_rotation(i).getValue(time); % Velocity this.veloc_rot = this.veloc_rot + vel; % Angular orientation ang = ang + vel * dt; end end % New coordinates L = this.len/2; x1 = coord_mid(1) - L * cos(ang); y1 = coord_mid(2) - L * sin(ang); x2 = coord_mid(1) + L * cos(ang); y2 = coord_mid(2) + L * sin(ang); this.coord_ini = [x1;y1]; this.coord_end = [x2;y2]; end %------------------------------------------------------------------ function [x1,y1,x2,y2] = getBBoxLimits(this) x1 = min([this.coord_ini(1),this.coord_end(1)]); y1 = min([this.coord_ini(2),this.coord_end(2)]); x2 = max([this.coord_ini(1),this.coord_end(1)]); y2 = max([this.coord_ini(2),this.coord_end(2)]); end end
end