亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? convex_hull.m

?? CheckMate is a MATLAB-based tool for modeling, simulating and investigating properties of hybrid dyn
?? M
字號(hào):
function [CH,CI,dI] = convex_hull(P)

% Converts a vertices object into a polyhedron object.
%
% Syntax:
%   "[CH,CI,dI] = convex_hull(P)"
%
% Description:
%   "convex_hull(P)" returns a polyhedron object CH constructed as the
%   convex hull of the points in the vertices object "P", and the matrices
%   "CI" and "dI" that determine the inequalities of "CH".
%   Matlab's QHULL routine, which is based on a Quickhull search algorithm,
%   is used to compute the convex hull.
%
%   The following rules determine the construction of the polyhedron object:
%   
%   - If the vertex object contains just one point, the polyhedron object
%     is n-dimensional with the length 2*vector_tol in all dimensions.
%
%   - If the vertices determine a full-dimensional hull the polyhedron
%     object is of course full dimensional.
%
%   - If the vertices determine an (n-1)-dimensional hull the polyhedron
%     object is not bloated, i.e., it is (n-1)-dimensional.
%
%   - If the convex hull of the vertices is of a dimension lower than (n-1)
%     but larger than zero, the polyhedron is bloated to full dimension,
%     i.e., this routine does never return an object that is of dimension
%     less than n-1.
%
%   Note: Since this routine accesses fields of polyhedron objects it can
%   only be used if it is located within the method of this class, i.e.,
%   if it is in the "@polyhedron" folder of the Checkmate distribution.
%
% See Also:
%   polyhedron,vertices
%
%
% --OS-- Last change: 06/05/02
%

global GLOBAL_APPROX_PARAM

CH=polyhedron;
CI=[]; dI=[]; VI=cell(1,1);
CE=[]; dE=[]; VE=cell(1,1);
ni=0; ne=0;

roundtol = GLOBAL_APPROX_PARAM.poly_vector_tol;
if (roundtol==0)
   roundtol=1e3*eps;
end

svdtol = GLOBAL_APPROX_PARAM.poly_svd_tol;
if (svdtol==0)
   svdtol=1e4*eps;
end

% Absolute value for bloating
bloattol = GLOBAL_APPROX_PARAM.poly_bloat_tol;
% must be larger than 'roundtol'!
if bloattol<=roundtol+10*eps;
   bloattol=roundtol+10*eps;
end

% Rounding and Removal of points with multiple occurrence:
verts=[];
for i=1:length(P)
   verts=[verts; roundtol*round(P(i)'/roundtol)];
end
verts=unique(verts,'rows');
n=size(verts,2);
m=size(verts,1);

%--------------------------------------------------------------------------
% CASE 1: Input contains only one point
%         The convex hull is a hyperrectangular box obtained from bloating.
%--------------------------------------------------------------------------
if (m==1)
   CI=zeros(2*n,n);
   Ver=[];
   for (i=1:n)
      CI(2*i-1,i)=-1; dI(2*i-1,1)=-verts(i)+bloattol;    
      CI(2*i,i)=1; dI(2*i,1)=verts(i)+bloattol;
      jM=[];     
      for j=1:n
         if (j~=i)
            jMa=[jM;(verts(j)-bloattol)*ones(1,max(size(jM,2),1))];
            jMb=[jM;(verts(j)+bloattol)*ones(1,max(size(jM,2),1))];
            jM=[jMa,jMb];    
        end    
      end
      jMm=[jM(1:i-1,:);(verts(i)-bloattol)*ones(1,size(jM,2));jM(i:size(jM,1),:)];
      jMp=[jM(1:i-1,:);(verts(i)+bloattol)*ones(1,size(jM,2));jM(i:size(jM,1),:)];
      Ver=[Ver,jMm,jMp];
      VI{2*i-1}=vertices(jMm); VI{2*i}=vertices(jMp);
   end   
   CH.CI=CI; CH.dI=dI; CH.VI=VI;
   CH.CE=CE; CH.dE=dE; CH.VE=VE; 
   CH.vtcs=vertices(unique(Ver','rows')');
   return 
end    
%---- END OF CASE 1 -------------------------------------------------------


% Singular Value Decomposition:
x_org=verts(1,:);
dverts=[];
for i=1:size(verts,1)
   dverts=[dverts;verts(i,:)-x_org];
end
[U,S,V]=svd(dverts);
VT=V';

% Determination of the Rank Deficiency depending on 'roundtol'
rs=0;
for i=1:min(size(S))
   if abs(S(i,i))<svdtol
      S(i,i)=0; 
   else    
      rs=rs+1;        % rs: rank of manipulated S   
   end
end
rd=n-rs;              % rd: rank deficiency

if (rd>1)
   warning([' CONVEX_HULL leads to a hull of dimension ',num2str(rs),' - the hull is expanded to full dimension!']);
end

%---- CASE 2: Points form an n-dimensional object "normal case" -----------
if (rs==n)

   % Compute the convexhull in the original space
   chi=convhulln(verts);

   eqverts=[]; Ver=[];
   for i=1:size(chi,1) % Loop over all facets
      facetverts=[];
      for j=1:n
         facetverts=[facetverts,verts(chi(i,j),:)'];
      end
      [c,d]=points2hyperplane(vertices(facetverts));
         
      % Check if 'c' points to outside, and correct it if not:
      if ~isempty(c)
         k=1;
         while (k<=m)
            if ~ismember(k,chi(i,:))
               if (c'*verts(k,:)'-d > 10*eps)
                  c=-c; d=-d;
                  break
               end
            end     
            k=k+1;   
         end    
         Ver=[Ver,facetverts];
         CI=[CI;c']; dI=[dI;d]; 
         ni=ni+1; VI{ni}=vertices(facetverts);      
      end   
   end   
   CH.CI=CI; CH.dI=dI; CH.VI=VI;
   CH.CE=CE; CH.dE=dE; CH.VE=VE; 
   CH.vtcs=vertices(unique(Ver','rows')');
   CH=clean_polyhedron(CH,n);
   return
end
%---- END OF CASE 2 -------------------------------------------------------

% Transformation Matrices:
T=VT(1:rs,:);
R=VT(rs+1:rs+rd,:);

%---- CASE 3: Points form a 1-dimensional object --------------------------
if (rs==1)  % CONVHULLN cannot be called
   tdverts=(T*dverts')';
   tdmin=min(tdverts); tdmax=max(tdverts);
   CI=[VT;-VT];
   dI=[tdmax+T*x_org'+2*eps; bloattol*ones(rd,1)+R*x_org'; -tdmin-T*x_org'-2*eps; bloattol*ones(rd,1)-R*x_org']; 
   % Bloating the minimum and maximum point to 2^rd points each:
   vbmin=[tdmin-eps]; vbmax=[tdmax+eps];
   for (j=1:rd)
      jvbmin1=[vbmin; -bloattol*ones(1,max(size(vbmin,2),1))]; jvbmin2=[vbmin; bloattol*ones(1,max(size(vbmin,2),1))];
      vbmin=[jvbmin1,jvbmin2];    
      jvbmax1=[vbmax; -bloattol*ones(1,max(size(vbmax,2),1))]; jvbmax2=[vbmax; bloattol*ones(1,max(size(vbmax,2),1))];
      vbmax=[jvbmax1,jvbmax2];       
   end
   % Backtransformation of the points:
   pmin=V*vbmin; pmax=V*vbmax;
   for i=1:size(pmin,2)
      pmin(:,i)=pmin(:,i)+x_org'; pmax(:,i)=pmax(:,i)+x_org';   
   end
   p=[pmin,pmax];
   % Assignment of vertices to faces:
   vi=cell(size(CI,1),1);
   for i=1:size(p,2)
      for j=1:size(CI,1)
         if (CI(j,:)*p(:,i)<=dI(j)+10*eps)&(CI(j,:)*p(:,i)>=dI(j)-10*eps)
            vi{j}=[vi{j},p(:,i)];   
         end
      end
   end
   for j=1:size(CI,1)
      VI{j}=vertices(vi{j});
   end      
   CH.CI=CI; CH.dI=dI; CH.VI=VI;
   CH.CE=CE; CH.dE=dE; CH.VE=VE; 
   CH.vtcs=vertices(p);
   CH=clean_polyhedron(CH,n);
   return
end
%---- END OF CASE 3 -------------------------------------------------------

%---- CASE 4: Points form an (n-1)-dimensional object (and rs>1) ----------
if rd==1
   % Transformation into the rs-dimensional space
   tdverts=(T*dverts')';
   % Compute the convexhull in the transformed space
   chi=convhulln(tdverts);

   Ver=[];
   for i=1:size(chi,1) % Loop over all facets
      facetverts=[];
      for j=1:rs
         facetverts=[facetverts,tdverts(chi(i,j),:)'];
      end
      [c,d]=points2hyperplane(vertices(facetverts));

      % Determine where outside of the facet is, and reverse 'c' if necessary:
      if ~isempty(c)
         k=1;
         while (k<=size(tdverts,1))
            if ~ismember(k,chi(i,:))
               if (c'*tdverts(k,:)'-d > 10*eps)
                  c=-c; d=-d;
                  break
               end
            end     
            k=k+1;
         end   
         % Backtransformation of the relevant facet vertices:
         bfverts=V*[facetverts;zeros(1,size(facetverts,2))];
         bverts=[];
         for j=1:size(bfverts,2)
            bverts=[bverts,bfverts(:,j)+x_org'];
         end
         % Create the polyhedron object:
         CI=[CI; c'*T]; dI=[dI; d+c'*T*x_org'+2*eps]; 
         Ver=[Ver,bverts];
         ni=ni+1; VI{ni}=vertices(bverts);
      end
   end   

   CH.CI=CI; CH.dI=dI; CH.VI=VI;
   CH.CE=VT(rs+1,:); CH.dE=VT(rs+1,:)*x_org'; CH.VE{1}=vertices(unique(Ver','rows')');      
   CH.vtcs=vertices(unique(Ver','rows')');
   CH=clean_polyhedron(CH,n);
   return
end
%---- END OF CASE 4 -------------------------------------------------------

%---- CASE 5: Points form an object of dimension 2 to n-2 -----------------
if (rs>1)&(rd>1)
   % Transformation into the rs-dimensional space
   tdverts=(T*dverts')';
   % Compute the convexhull in the transformed space
   chi=convhulln(tdverts);
   
   Ver=[];
   ifcaib=0;   % identifier that is set to one once the constraints resulting from bloating are added   
   ind=[];     % index vector that stores the indices of those rows of CI which correspond to bloated directions
   for i=1:size(chi,1) % Loop over all facets
      facetverts=[];
      for j=1:rs
         facetverts=[facetverts,tdverts(chi(i,j),:)'];
      end
      [c,d]=points2hyperplane(vertices(facetverts));

      % Determine where outside of the facet is, and reverse 'c' if necessary:
      if ~isempty(c)
         k=1;
         while (k<=size(tdverts,1))
            if ~ismember(k,chi(i,:))
               if (c'*tdverts(k,:)'-d > 10*eps)
                  c=-c; d=-d;
                  break
               end
            end     
            k=k+1;   
         end    
         % Backtransformation of the relevant facet vertices:
         bfiverts=facetverts;
         for (j=1:rd)
            sbfi=size(bfiverts,2);    
            bfiverts=[[bfiverts;bloattol*ones(1,sbfi)],[bfiverts;-bloattol*ones(1,sbfi)]]; 
         end
         bfverts=V*bfiverts;   

         bverts=[];
         for j=1:size(bfverts,2)
            bverts=[bverts,bfverts(:,j)+x_org'];
         end
         % Create the polyhedron object:
         CI=[CI; c'*T]; dI=[dI; d + c'*T*x_org' + 2*eps]; 
         ni=ni+1; VI{ni}=vertices(bverts);
         Ver=[Ver,bverts];
         if (ifcaib==0)
            for (j=1:rd)
               CI=[CI; R(j,:); -R(j,:)]; dI=[dI; bloattol + R(j,:)*x_org'; bloattol - R(j,:)*x_org']; 
               ni=ni+2; ind=[ind,ni-1,ni]; VI{ni-1}=[]; VI{ni}=[];
               % The vertices are already stored in 'Ver'.
            end   
            ifcaib=1;   
         end
      end   
   end
   
   % Assign vertices:
   Ver=unique(Ver','rows')';
   for i=1:size(Ver,2)
      for j=1:length(ind)
         if (CI(ind(j),:)*Ver(:,i)<=dI(ind(j))+10*eps) & (CI(ind(j),:)*Ver(:,i)>=dI(ind(j))-10*eps)   
            vij=VI{ind(j)};
            vijk=[];
            for k=1:length(vij)
               vijk=[vijk,vij(k)];
            end
            VI{ind(j)}=vertices([vijk,Ver(:,i)]);
         end
      end
   end   
      
   CH.CI=CI; CH.dI=dI; CH.VI=VI;
   CH.CE=CE; CH.dE=dE; CH.VE=VE; 
   CH.vtcs=vertices(Ver);
   CH=clean_polyhedron(CH,n);
   return
end
%---- END OF CASE 5 -------------------------------------------------------

return  


% ----------------------------------------------------------------------
function cP = clean_polyhedron(P,n)

% This function tests whether the polyhedron objects contains inequality
% constraints that are redundant (within a tolerance vector_tol);
%
% (Equality constraints are changed. The fields 'VE' and 'vtcs' are also not updated
%  - this is impossible since it is not known which points are superfluous.)
%
% Remark: The fact that redundant inequality constraints and superfluous points
% can be contained in P is a result from the qhull-routine which uses perturbation
% of points combined with triangulation.
%

global GLOBAL_APPROX_PARAM

cP=polyhedron;

%tol=1e-8;
tol=0.9*GLOBAL_APPROX_PARAM.poly_vector_tol;

p=0; ind=[];
for i=1:size(P.CI,1)
    Cdi=[P.CI(i,:),P.dI(i,:)];
    b1=0;
    if (i>1)
       for j=1:size(cP.CI,1)
          Cdj=[cP.CI(j,:),cP.dI(j,:)];
          k=1; b2=0;
          while (k<=(size(P.CI,2)+1))
            if (abs(Cdj(k)-Cdi(k))>tol)
               b2=1;   % at least one entry different
               break
            end
            k=k+1;
          end
          if b2==0     % all components are the same
             b1=j;
             break    
          end
       end
    end
    if b1>0  % remove component -> do not copy to cP
       va=[];
       for q=1:length(cP.VI{b1})
          va=[va,cP.VI{b1}(q)];
       end    
       for q=1:length(P.VI{i})
          va=[va,P.VI{i}(q)];
       end
       va=unique(va','rows')';
       cP.VI{b1}=vertices(va);
       ind=[ind,b1];   
    else     % copy components from P tp cP
       p=p+1;
       cP.CI(p,:)=P.CI(i,:); cP.dI(p,:)=P.dI(i,:); cP.VI{p}=P.VI{i};
    end
end    

% Check the validity of vertices of eliminated faces
if (length(P.CE)==0)
   dc=n;
else
   dc=n-1;
end   
for i=1:length(ind)
   Va=[];
   for j=1:length(cP.VI{ind(i)})
      dV=cP.CI*cP.VI{ind(i)}(j)-cP.dI;
      ffc=0;
      for k=1:length(dV)
         if abs(dV(k))<=10*eps
            ffc=ffc+1;
         end
      end
      if ffc>=dc
         Va=[Va,cP.VI{ind(i)}(j)];   
      end   
   end
   cP.VI{ind(i)}=vertices(Va);
end
Ver=[];
for i=1:size(cP.CI,1)
   for j=1:length(cP.VI{i})
      Ver=[Ver,cP.VI{i}(j)];           
   end   
end
cP.vtcs=vertices(unique(Ver','rows')');
cP.VE{1}=cP.vtcs;

% No change for:
cP.CE=P.CE; cP.dE=P.dE;

return


% ----------------------------------------------------------------------
function [c,d] = points2hyperplane(P)

% Given a set of n points, calculate the normal vector 'c' and the constant 'd'
% that define the hyperplane which all points in P belong to.

global GLOBAL_APPROX_PARAM

if length(P) == 0
  c = []; d = [];
  return
end

n = dim(P);
if (length(P) ~= n)
  c = []; d = [];
  fprintf(1,'points2hyperplane: improper number of points given.\n')
  return
end

DIFF = [];
for k = 2:n
  DIFF = [DIFF (P(k)-P(1))];
end
tol = GLOBAL_APPROX_PARAM.poly_vector_tol;
if (rank(DIFF,tol) < (n-1))
  c = []; d = [];
  %fprintf(1,'points2hyperplane: given points do not form a hyperplane.\n')
  return
end

for k1 = 1:n
  additional =  [zeros(1,k1-1) max(max(abs(DIFF))) zeros(1,n-k1)]';
  T = [DIFF additional];
  if (rank(T,tol) == n)
    break;
  end
end
c = T'\[zeros(1,n-1) 1]';
c = c/sqrt(c'*c);
d = c'*average(P);
return

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜免费电影| 久久精品国内一区二区三区 | 在线看一区二区| 欧美一区二区高清| 国产精品每日更新在线播放网址| 午夜电影一区二区| 99re66热这里只有精品3直播 | 26uuu色噜噜精品一区二区| 一区二区三区中文在线| 国产精品一区二区不卡| 欧美精品一卡两卡| 樱花影视一区二区| 99久久综合国产精品| 久久亚区不卡日本| 久久99九九99精品| 日韩免费视频一区二区| 性久久久久久久久久久久| 在线亚洲高清视频| 亚洲色图制服诱惑 | 欧美性猛交xxxx黑人交| 中文字幕一区av| 国产99久久久国产精品免费看 | 精品视频一区二区三区免费| 亚洲三级在线免费观看| 成人黄色av网站在线| 国产亚洲精品aa午夜观看| 韩国欧美一区二区| 久久夜色精品国产欧美乱极品| 免费在线观看日韩欧美| 91精品国产色综合久久不卡蜜臀| 亚洲妇女屁股眼交7| 一本久道中文字幕精品亚洲嫩| 亚洲免费观看在线观看| 91亚洲男人天堂| 亚洲啪啪综合av一区二区三区| 91网页版在线| 一区二区三区四区在线播放 | 国产.精品.日韩.另类.中文.在线.播放 | 麻豆一区二区三| 日韩区在线观看| 九色综合国产一区二区三区| 精品奇米国产一区二区三区| 国产精品99久久久| 国产精品久久久久久久蜜臀| 91在线观看成人| 亚洲一区二区三区在线看| 91精品国产欧美一区二区18| 久久国产精品99久久久久久老狼| 26uuu国产日韩综合| 国产99精品国产| 一区二区三区四区av| 欧美人与z0zoxxxx视频| 免费在线观看一区| 亚洲国产精品v| 欧美中文字幕不卡| 麻豆91在线播放| 中文字幕电影一区| 欧美四级电影在线观看| 免费不卡在线观看| 中文字幕一区二区三区不卡在线| 精品视频在线免费看| 国产一区二区三区四区五区美女 | 久久亚洲综合色| 91视频在线看| 久久国产免费看| 亚洲精品视频在线观看网站| 这里只有精品99re| av激情成人网| 久久精品国产亚洲高清剧情介绍| 欧美激情在线看| 欧美精品久久99| 风流少妇一区二区| 男男gaygay亚洲| 亚洲欧美日韩一区| 久久久五月婷婷| 欧美精选午夜久久久乱码6080| 国产传媒一区在线| 日韩在线播放一区二区| 亚洲欧美在线视频| 精品国产乱码久久久久久图片| 91在线播放网址| 国产成人精品一区二区三区四区| 亚洲高清免费观看| 亚洲精品中文字幕乱码三区| 久久综合色鬼综合色| 欧美另类变人与禽xxxxx| 粉嫩aⅴ一区二区三区四区五区 | 成人福利在线看| 久久91精品国产91久久小草| 亚洲美女视频一区| 国产精品激情偷乱一区二区∴| 日韩免费视频一区二区| 欧美三级电影精品| 91免费国产视频网站| 国产一区二区三区国产| 日本不卡中文字幕| 三级久久三级久久| 亚洲一区av在线| 一区二区三区在线播放| 成人免费在线视频| 中文av一区二区| 欧美极品美女视频| 中文在线免费一区三区高中清不卡| 日韩三级电影网址| 精品久久一二三区| 日韩美女一区二区三区| 日韩亚洲欧美一区| 91精品国产综合久久精品 | 91在线视频网址| 成人av在线影院| 福利电影一区二区| 成人免费黄色大片| 成人做爰69片免费看网站| 国产乱人伦偷精品视频不卡| 另类小说视频一区二区| 精品一区二区在线免费观看| 精品一区二区三区不卡| 韩国三级电影一区二区| 国产精品99久久久久久久女警| 国产成人午夜精品影院观看视频| 国产一区二区三区香蕉| 成人国产免费视频| 一本大道综合伊人精品热热| 欧美视频第二页| 制服.丝袜.亚洲.中文.综合| 欧美xxxxx牲另类人与| 国产亚洲成aⅴ人片在线观看| 国产精品色眯眯| 亚洲精品成人在线| 天天综合色天天综合色h| 捆绑变态av一区二区三区| 国产精品18久久久| 一本久久a久久免费精品不卡| 欧美日韩激情一区二区| 精品三级在线观看| 国产精品进线69影院| 亚洲成a人v欧美综合天堂下载| 免费人成网站在线观看欧美高清| 看电影不卡的网站| av一区二区三区黑人| 欧美视频自拍偷拍| 精品国产免费人成电影在线观看四季| 欧美韩国一区二区| 亚洲国产美女搞黄色| 精品亚洲国内自在自线福利| 成人av电影在线网| 538prom精品视频线放| 久久婷婷国产综合精品青草| 亚洲色图视频网| 美国av一区二区| 色av成人天堂桃色av| 亚洲精品在线免费播放| 亚洲天堂成人网| 久久99久久精品欧美| 色婷婷精品大视频在线蜜桃视频| 3atv在线一区二区三区| 国产精品国产三级国产有无不卡 | 日韩一区二区三区在线观看| 国产精品系列在线| 青青草国产成人av片免费| 波多野结衣91| 日韩精品一区二区三区三区免费| 国产人成亚洲第一网站在线播放 | 99综合影院在线| 欧美电影免费提供在线观看| 日韩美女久久久| 高清不卡一区二区在线| 日韩欧美国产1| 亚洲福中文字幕伊人影院| av高清久久久| 久久精品视频免费| 精品一区二区免费在线观看| 欧美日韩精品欧美日韩精品一| 国产欧美精品区一区二区三区| 日本sm残虐另类| 欧美日韩一区国产| 一区二区三区不卡视频在线观看| 国产成人亚洲综合a∨婷婷图片| 在线不卡一区二区| 亚洲一区二区三区精品在线| 成人免费看视频| 国产精品视频一二| 国产精品99久久久久久久vr| 日韩精品一区二区在线| 蜜臀av性久久久久av蜜臀妖精| 欧美在线高清视频| 亚洲一区二区三区激情| 色视频欧美一区二区三区| 国产精品电影院| av不卡免费电影| 亚洲色图在线播放| thepron国产精品| 国产精品乱码一区二三区小蝌蚪| 国产一区二区三区免费播放 | 国产美女一区二区三区| 久久伊99综合婷婷久久伊| 国产在线播放一区二区三区| 精品蜜桃在线看| 国产精品亚洲午夜一区二区三区| 精品国精品国产|