properties
a; %Długość podstawy
b; %Wysokość
x; %Punkt x przekatnej
y; %Punkt y przekatnej
R=0; %Czerwony
G=0; %Zielony
B=0; %Niebieski
Rk=0; %Czerwony, krawedz
Gk=0; %Zielony, krawedz
Bk=0; %Niebieski, krawedz
P; %Pole
O; %Obwod
alfa; %Kąt pomiędzy bokiem a a osią x
grubosc_linii;
kolor=[0,0,0];
kolor_krawedzi=[0,0,0];
end
properties(Constant = true)
xmin= -20;
ymin= -20;
xmax= 20;
ymax= 20;
end
methods
function obj=prostokat(varargin)
switch nargin
case 4
if((isa(varargin{3},'double'))&&(isa(varargin{4},'double'))&&(isa(varargin{1},'double'))&&(isa(varargin{2},'double')))
if(varargin{1}>=0)&&(varargin{2}>=0)
obj.a = varargin{1};
obj.b = varargin{2};
obj.x = varargin{3};
obj.y = varargin{4};
obj.kolor = rand(1,3);
obj.kolor_krawedzi = rand(1,3);
end
end
if((isa(varargin{3},'char'))||(isa(varargin{4},'char'))||(isa(varargin{1},'char'))||(isa(varargin{2},'char')))
error('Zmienne a, b, x, y nie moze byc typu znakowego')
end
if((varargin{1}<=0)||(varargin{2}<=0))
error('Boki nie moga miec ujemnej badz zerowej wartosci')
end
case 2
if((isa(varargin{1},'double'))&&(isa(varargin{2},'double')))
if(varargin{1}>=0)&&(varargin{2}>=0)
obj.a=varargin{1};
obj.b=varargin{2};
obj.x=rand*10;
obj.y=rand*10;
obj.kolor=rand(1,3);
obj.kolor_krawedzi=rand(1,3);
end
end
if((isa(varargin{1},'char'))||(isa(varargin{2},'char')))
error('Zmienne a, b nie moze byc typu znakowego')
end
if((varargin{1}<=0)||(varargin{2}<=0))
error('Boki nie moga miec ujemnej badz zerowej wartosci')
end
case 0
obj.a=rand*100;
obj.b=rand*100;
obj.x=rand*10;
obj.y=rand*10;
obj.kolor=rand(1,3);
obj.kolor_krawedzi=rand(1,3);
case 5
if((isa(varargin{3},'double'))&&(isa(varargin{4},'double'))&&(isa(varargin{1},'double'))&&(isa(varargin{2},'double')))
if(varargin{1}>=0)&&(varargin{2}>=0)
obj.kolor=varargin{5};
if((1>=obj.R)&&(obj.R>=0)&&(obj.G>=obj.G)&&(obj.G>=0)&&(1>=obj.B)&&(obj.B>=0))
obj.a=varargin{1};
obj.b=varargin{2};
obj.x=varargin{3};
obj.y=varargin{4};
obj.kolor=varargin{5};
obj.kolor_krawedzi=rand(1,3);
end
end
end
if((isa(varargin{3},'char'))||(isa(varargin{4},'char'))||(isa(varargin{1},'char'))||(isa(varargin{2},'char')))
error('Zmienne a, b, x, y nie moze byc typu znakowego')
end
if((varargin{1}<=0)||(varargin{2}<=0))
error('Boki nie moga miec ujemnej badz zerowej wartosci')
end
if((1<obj.R)&&(obj.R<0)&&(1<obj.G)&&(obj.G<0)&&(1<obj.B)&&(obj.B<0))
error('Kolor {R, G, B} musi być podany w przedzialach od 0 do 1')
end
case 6
if((isa(varargin{3},'double'))&&(isa(varargin{4},'double'))&&(isa(varargin{1},'double'))&&(isa(varargin{2},'double')))
if(varargin{1}>=0)&&(varargin{2}>=0)
obj.kolor=varargin{5};
if((1>=obj.R)&&(obj.R>=0)&&(1>=obj.G)&&(obj.G>=0)&&(1>=obj.B)&&(obj.B>=0))
obj.kolor_krawedzi=varargin{6};
if((1>=obj.Rk)&&(obj.Rk>=0)&&(1>=obj.Gk)&&(obj.Gk>=0)&&(1>=obj.Bk)&&(obj.Bk>=0))
obj.a=varargin{1};
obj.b=varargin{2};
obj.x=varargin{3};
obj.y=varargin{4};
obj.kolor=varargin{5};
obj.kolor_krawedzi=varargin{6};
end
end
end
end
if((isa(varargin{3},'char'))||(isa(varargin{4},'char'))||(isa(varargin{1},'char'))||(isa(varargin{2},'char')))
error('Zmienne a, b, x, y nie moze byc typu znakowego')
end
if((varargin{1}<=0)||(varargin{2}<=0))
error('Boki nie moga miec ujemnej badz zerowej wartosci')
end
if((1<obj.R)&&(obj.R<0)&&(1<obj.G)&&(obj.G<0)&&(1<obj.B)&&(obj.B<0))
error('Kolor {R, G, B} musi być podany w przedzialach od 0 do 1')
end
if((1<obj.Rk)&&(obj.Rk<0)&&(1<obj.Gk)&&(obj.Gk<0)&&(1<obj.Bk)&&(obj.Bk<0))
error('Kolor krawedzi {Rk, Gk, Bk} musi być podany w przedzialach od 0 do 1')
end
otherwise
error('Prosze podac 0, 2, 4, 5, lub 6 argumentow wejsciowych')
end
end
function obj=display(obj)
lancuch=sprintf('Obiekt klasy prostokat, o bokach a=%4.2f, b=%4.2f, środku w punkcie (%4.2f, %4.2f)',obj.a, obj.b, obj.x, obj.y);
disp(lancuch);
end
function obw=get.O(obj)
obw=(2*obj.a)+(2*obj.b);
end
function pol=get.P(obj)
pol=obj.a*obj.b;
end
function obj=set.O(obj,~)
disp('Nie mozna zmienic wartosci obwodu obiektu');
end
function obj=set.P(obj,wartosc)
disp('Nie mozna zmienic wartosci pola obiektu');
end
function obj=set.a(obj,wartosc)
if(wartosc<=0)
disp('Wartosc boku nie moze byc ujemna');
else
obj.a=wartosc;
end
end
function obj = plus(obj1,obj2)
obj.a = obj1.a + obj2.a;
obj.b = obj1.b + obj2.b;
obj.x = (obj1.x + obj2.x)/2;
obj.y = (obj1.y + obj2.y)/2;
obj.kolor = (obj1.kolor + obj2.kolor)/2;
obj.kolor_krawedzi = (obj1.kolor_krawedzi + obj2.kolor_krawedzi)/2;
obj = prostokat(obj.a, obj.b, obj.x, obj.y, obj.kolor, obj.kolor_krawedzi);
end
function rysuj(obj)
x1 = obj.x - (obj.a/2);
x2 = obj.x + (obj.a/2);
x3 = x1;
x4 = x2;
X = [x1, x2, x4, x3];
y1 = obj.y - (obj.b/2);
y2 = y1;
y3 = obj.y + (obj.b/2);
y4 = y3;
Y = [y1, y2, y4, y3];
fill(X, Y, obj.kolor);
hold on;
X = [x1, x2, x4, x3, x1];
Y = [y1, y2, y4, y3, y1];
plot(X, Y, 'Color', obj.kolor_krawedzi, 'LineWidth', 2);
end
end
methods(Static = true)
function wyjscie = zmianaStatyczna(dane)
persistent zmienna;
if nargin>0
zmienna = dane;
end
wyjscie = zmienna;
end
end
end