Dynamic-Calibration/utils/YALMIP-master/extras/plothyperplanes.m

73 lines
1.5 KiB
Matlab
Executable File

function varargout = plothyperplanes(varargin)
%PLOTLATTICE Draws the hyperplanes of a polytope
%
% p = plothyperplanes(P,color,D)
%
% Note that only polytopes in R^2 are supported.
%
% C : Constraint object
% color: color [double] ([r g b] format) or char from 'rymcgbk'
% D : Region over which plot is generated. Based on bounding box if not supplied
P = varargin{1};
if length(depends(P)) > 2
error('PLOTHYPERPLANES is only applicable in 2D');
end
if nargin > 1
color = varargin{2};
if isempty(color)
color = 'blue';
end
else
color = 'blue';
end
if nargin > 2
domain = varargin{3};
X = recover(depends(domain));
[~,L,U] = boundingbox(domain);
oldL = L;
oldU = U;
else
domain = P;
X = recover(depends(P));
[~,L,U] = boundingbox(P);
oldL = L;
oldU = U;
% Explode the box
C = (U+L)/2;
W = (U-L)/2;
U = C+1.5*W;
L = C-1.5*W;
end
bA = getbase(sdpvar(P));
ls = [];
for i = 1:size(bA,1);
b = bA(i,1);
a = -bA(i,2:end);
if a(1) == 0
p1 = [L(1) b/a(2)];
p2 = [U(1) b/a(2)];
elseif a(2) == 0
p1 = [b/a(1) L(2)];
p2 = [b/a(1) U(2)];
else
p1 = [L(1) (b-a(1)*L(1))/a(2)];
p2 = [U(1) (b-a(1)*U(1))/a(2)];
end
l = line([p1(1) p2(1)],[p1(2) p2(2)]);
set(l,'color',color);
ls = [ls l];
end
% L = oldL;
% U = oldU;
% C = (L+U)/2;W = (U-L)/2;
% L = C-2*W;
% U = C+2*W;
axis([L(1) U(1) L(2) U(2)])
varargout{1} = ls;