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

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

?? quadtree.m

?? 一個功能強(qiáng)大的非結(jié)構(gòu)網(wǎng)格劃分程序,可實(shí)現(xiàn)網(wǎng)格的自動剖分,及局部加密與質(zhì)量控制
?? M
?? 第 1 頁 / 共 2 頁
字號:
function [p,t,h] = quadtree(edgexy,hdata,dhmax,wbar)

%  QUADTREE: 2D quadtree decomposition.
%
% A quadtree decomposition of the linear geometry input is performed. The 
% bounding box is recursively subdivided until the dimension of each box 
% matches the local geometry feature size. The geometry feature size is 
% based on the minimum distance between linear geometry segments.
%
% A size function is obtained at the quadtree vertices based on the minimum
% neighbouring box dimension at each vertex. This size function is gradient
% limited to produce a smooth function.
%
% The quadtree is triangulated for use as a background mesh to store the
% size function.
%
%   edgexy  : [x1,y1,x2,y2] edge endpoints
%   hdata   : User defined size function structure
%   dhmax   : Maximum allowalble relative gradient in the size function
%
%   p       : Background mesh nodes
%   t       : Background mesh triangles
%   h       : Size function value at p

%   Darren Engwirda : 2007
%   Email           : d_engwirda@hotmail.com
%   Last updated    : 08/07/2007 with MATLAB 7.0

%% LOCAL FEATURE SIZE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
waitbar(0,wbar,'Estimating local geometric feature size');

% Get size function data
[hmax,edgeh,fun,args] = gethdata(hdata);

% Insert test points along the boundaries at which the LFS can be
% approximated.
wm = 0.5*(edgexy(:,[1,2])+edgexy(:,[3,4]));                                % Use the edge midpoints as a first pass
len = sqrt(sum((edgexy(:,[3,4])-edgexy(:,[1,2])).^2,2));                   % Edge length
L = 2*dist2poly(wm,edgexy,len);                                            % Estimate the LFS at these points by calculating
                                                                           % the distance to the closest edge segment                           
% In cases where edges are separated by less than their length
% we will need to add more points to capture the LFS in these
% regions. This allows us to pick up "long and skinny" geometry
% features
r = 2*len./L;                                                              % Compare L (LFS approximation at wm) to the edge lengths
r = round((r-2)/2);                                                        % Amount of points that need to be added
add = find(r);                                                             % at each edge
if ~isempty(add)
   num = 2*sum(r(add));                                                    % Total number of points to added
   start = size(wm,1)+1;
   wm = [wm; zeros(num,2)];                                                % Alloc space
   next = start;
   for j = 1:length(add)                                                   % Loop through edges to be subdivided
      cw = add(j);                                                         % Current edge
      num = r(cw);
      tmp = (1:num)'/(num+1);                                              % Subdivision increments
      num = next+2*num-1;

      x1 = edgexy(cw,1); x2 = edgexy(cw,3); xm = wm(cw,1);                 % Edge values
      y1 = edgexy(cw,2); y2 = edgexy(cw,4); ym = wm(cw,2);

      wm(next:num,:) = [x1+tmp*(xm-x1), y1+tmp*(ym-y1)                     % Add to list
                        xm+tmp*(x2-xm), ym+tmp*(y2-ym)];
      next = num+1;
   end
   L = [L; dist2poly(wm(start:next-1,:),edgexy)];                          % Estimate LFS at the new points
end

% Compute the required size along the edges for any boundary layer size
% functions and add additional points where necessary.
if ~isempty(edgeh)
   h0 = edgeh(:,2);
   i = edgeh(:,1);
   for j = 1:length(i)
      if L(i(j))>h0
         cw = i(j);
         r = 2*len(cw)/h0(j);
         r = round((r-2)/2);                                               % Number of points to be added
         tmp = (1:r)'/(r+1);

         x1 = edgexy(cw,1); x2 = edgexy(cw,3); xm = wm(cw,1);              % Edge values
         y1 = edgexy(cw,2); y2 = edgexy(cw,4); ym = wm(cw,2);

         wm = [wm; x1+tmp*(xm-x1), y1+tmp*(ym-y1);                         % Add to list
                   xm+tmp*(x2-xm), ym+tmp*(y2-ym)];

         L(cw) = h0(j);                                                    % Update LFS
         L = [L; h0(j)*ones(2*r,1)];
      end
   end
end

% To speed the point location in the quadtree decomposition
% sort the LFS points based on y-value
[i,i] = sort(wm(:,2));
wm = wm(i,:);
L = L(i);
nw = size(wm,1);

%% UNBALANCED QUADTREE DECOMPOSITION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
waitbar(0.4,wbar,'Quadtree decomposition');

xymin = min([edgexy(:,[1,2]); edgexy(:,[3,4])]);                           % Bounding box
xymax = max([edgexy(:,[1,2]); edgexy(:,[3,4])]);

dim = max(xymax-xymin);                                                    % Bbox dimensions
xm = 0.5*(xymin(1)+xymax(1));
ym = 0.5*(xymin(2)+xymax(2));

p = [xm-0.5*dim, ym-0.5*dim                                                % Initial nodes
     xm+0.5*dim, ym-0.5*dim
     xm+0.5*dim, ym+0.5*dim
     xm-0.5*dim, ym+0.5*dim];
b = [1,2,3,4];                                                             % Initial boxes
h = userhfun(p(:,1),p(:,2),fun,args,hmax,xymin,xymax);

pblock = 5*nw;                                                             % Alloc memory in blocks
bblock = pblock;

np = 4;
nb = 1;
test = true;
while true                                                           
   
   vec = find(test(1:nb));                                                 % Boxes to be checked at this step
   if isempty(vec)
      break
   end

   N = np;
   for k = 1:length(vec)                                                   % Loop through boxes to be checked for subdivision
      
      m  = vec(k);                                                         % Current box
      n1 = b(m,1);  n2 = b(m,2);
      n3 = b(m,3);  n4 = b(m,4);
      x1 = p(n1,1); y1 = p(n1,2);
      x2 = p(n2,1); y4 = p(n4,2);

      % Binary search to find first wm with y>=ymin for current box
      if wm(1,2)>=y1
         start = 1;
      elseif wm(nw,2)<=y1
         start = nw;
      else
         lower = 1;
         upper = nw;
         for i = 1:nw
            start = round(0.5*(lower+upper));
            if wm(start,2)<y1
               lower = start;
            elseif wm(start-1,2)<y1
               break;
            else
               upper = start;
            end
         end
      end

      LFS = 4*min([h(n1),h(n2),h(n3),h(n4),2*hmax/4]);
      for i = start:nw                                                     % Loop through points (acending y-value order)
         if wm(i,2)<=y4                                                    % Check box bounds and current min
            if wm(i,2)>=y1 && wm(i,1)>=x1 && wm(i,1)<=x2 && L(i)<LFS
               LFS = L(i);                                                 % New min found - reset
            end
         else                                                              % Due to the sorting
            break;
         end
      end

      if (x2-x1)>LFS                                                       % Split current box
         if (np+5)>=size(p,1)                                              % Alloc memory on demand
            p = [p; zeros(pblock,2)];
            pblock = 2*pblock;
         end
         if (nb+3)>=size(b,1)
            b = [b; zeros(bblock,4)];
            test = [test; true(bblock,1)];
            bblock = 2*bblock;
         end

         xm = x1+0.5*(x2-x1);                                              % Current midpoints
         ym = y1+0.5*(y4-y1);

         p(np+1,:) = [xm,ym];                                              % New nodes
         p(np+2,:) = [xm,y1];
         p(np+3,:) = [x2,ym];
         p(np+4,:) = [xm,y4];
         p(np+5,:) = [x1,ym];

         b(m,:)    = [n1,np+2,np+1,np+5];                                  % New boxes
         b(nb+1,:) = [np+2,n2,np+3,np+1];
         b(nb+2,:) = [np+1,np+3,n3,np+4];
         b(nb+3,:) = [np+5,np+1,np+4,n4];

         nb = nb+3;
         np = np+5;
      else
         test(m) = false;
      end
   end

   h = [h; userhfun(p(N+1:np,1),p(N+1:np,2),fun,args,hmax,xymin,xymax)];
end
p = p(1:np,:);
b = b(1:nb,:);

[p,i,j] = unique(p,'rows');                                                % Delete replicated nodes
h = h(i);
b = reshape(j(b),size(b));

%% FORM SIZE FUNCTION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
waitbar(0.6,wbar,'Forming element size function')

E = [b(:,[1,2]); b(:,[2,3]); b(:,[3,4]); b(:,[4,1])];                      % Edges
L = sqrt(sum((p(E(:,1),:)-p(E(:,2),:)).^2,2));                             % Edge length

nE = size(E,1);
for k = 1:nE                                                               % Initial h - minimum neighbouring edge length
   if L(k)<h(E(k,1))
      h(E(k,1)) = L(k); 
   end             
   if L(k)<h(E(k,2))
      h(E(k,2)) = L(k); 
   end
end

% Gradient limiting
tol = 1e-4;
while true                                                                 % Loop over the edges of the background mesh ensuring
   h_old = h;                                                              % that dh satisfies the dhmax tolerance
   for k = 1:nE                                                            % Loop over edges
      n1 = E(k,1);
      n2 = E(k,2);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色噜噜狠狠色综合中国| 中文字幕亚洲在| 91精品免费在线观看| 欧美性生交片4| 欧美日韩中文精品| 欧美老肥妇做.爰bbww视频| 欧美图区在线视频| 欧美高清视频一二三区 | 国产日产亚洲精品系列| 色香蕉成人二区免费| 免费一级片91| 一区二区三区**美女毛片| 精品国产1区2区3区| 精品视频一区 二区 三区| 成人免费观看男女羞羞视频| 理论电影国产精品| 日产国产高清一区二区三区| 一区二区三区在线视频免费| 肉色丝袜一区二区| 久久奇米777| 国产精品欧美久久久久无广告 | 亚洲品质自拍视频网站| 亚洲欧美另类久久久精品2019| 亚洲黄色录像片| 色综合久久久久综合体| 一本色道**综合亚洲精品蜜桃冫| 欧美三级中文字幕在线观看| 91麻豆精品国产91久久久资源速度| 日韩欧美精品在线| 亚洲国产电影在线观看| 亚洲裸体在线观看| 亚洲成av人片一区二区| 国产一区日韩二区欧美三区| 成人sese在线| 884aa四虎影成人精品一区| 欧美精品一区二区三| 中文字幕一区二区三区蜜月| 亚洲国产一区二区三区| 喷水一区二区三区| 成人av资源在线| 欧美日韩免费观看一区二区三区| 欧美tk—视频vk| 自拍视频在线观看一区二区| 天天色天天操综合| 成人一区二区三区在线观看| 欧美性感一区二区三区| 久久精品视频一区二区三区| 亚洲国产欧美另类丝袜| 国产精品亚洲专一区二区三区| 欧美午夜寂寞影院| 国产欧美1区2区3区| 亚洲h动漫在线| 成人三级在线视频| 欧美一区二区三区视频在线| 一区精品在线播放| 精品亚洲国产成人av制服丝袜| 一本色道综合亚洲| 久久一区二区视频| 亚洲成人1区2区| 成人免费视频国产在线观看| 日韩欧美久久一区| 亚洲国产欧美在线人成| 成人免费毛片a| 精品国产精品网麻豆系列 | 色综合久久久久综合99| 久久夜色精品国产欧美乱极品| 亚洲午夜一区二区| 成人激情黄色小说| 久久嫩草精品久久久精品| 亚洲成人在线观看视频| 91网站黄www| 国产片一区二区| 免费欧美在线视频| 欧美三级电影在线看| 中文字幕在线播放不卡一区| 国产一区二区三区免费播放| 在线播放91灌醉迷j高跟美女 | 国产欧美视频一区二区三区| 视频一区中文字幕| 色香蕉久久蜜桃| ...xxx性欧美| 成人在线综合网站| 久99久精品视频免费观看| 欧美日韩亚洲国产综合| 亚洲欧美日韩国产成人精品影院| 成人avav影音| 国产精品卡一卡二卡三| 国产成a人亚洲精| 久久久久久毛片| 国产麻豆精品久久一二三| 精品国产一区二区三区av性色| 麻豆精品久久精品色综合| 欧美一区二区三区在| 日日夜夜免费精品| 91精品在线观看入口| 日本亚洲三级在线| 在线综合视频播放| 日本成人中文字幕| 日韩亚洲欧美成人一区| 免费高清不卡av| 欧美电影免费观看高清完整版在 | 欧美伦理电影网| 亚洲国产视频一区| 欧美日韩精品专区| 日韩和欧美一区二区| 9191国产精品| 精品亚洲免费视频| 国产亚洲欧洲997久久综合| 国产精品亚洲成人| 国产精品全国免费观看高清 | 99久久国产综合精品女不卡| 国产精品不卡一区二区三区| av中文字幕亚洲| 亚洲日本一区二区| 欧美日韩免费高清一区色橹橹| 日一区二区三区| 精品久久一二三区| 国产91色综合久久免费分享| 国产精品乱码久久久久久| 97se亚洲国产综合自在线| 一区二区三区在线免费播放| 欧美群妇大交群的观看方式| 久久精品免费观看| 日本一区二区三区视频视频| 色女孩综合影院| 日韩不卡一区二区三区| 久久亚洲综合色一区二区三区| 成人精品免费视频| 一区二区三区**美女毛片| 欧美一区二区三区婷婷月色| 国产成人h网站| 一区二区三区小说| 精品乱码亚洲一区二区不卡| 国产丶欧美丶日本不卡视频| 亚洲日本欧美天堂| 欧美一级午夜免费电影| 国产成人精品一区二| 一区二区三区在线免费视频| 欧美一区二区三区成人| 成人综合婷婷国产精品久久免费| 夜色激情一区二区| 久久毛片高清国产| 色狠狠综合天天综合综合| 久久av中文字幕片| 自拍偷拍国产亚洲| 欧美成人精品二区三区99精品| 99国产精品99久久久久久| 日韩精品电影在线| 国产美女精品在线| 亚洲国产欧美在线| 国产精品污网站| 91麻豆精品国产无毒不卡在线观看| 国产成人午夜视频| 亚洲成人激情av| 国产精品久久久久永久免费观看| 欧美浪妇xxxx高跟鞋交| 成人黄色国产精品网站大全在线免费观看| 亚洲一区二区不卡免费| 久久久国产精品午夜一区ai换脸| 色94色欧美sute亚洲线路二| 国产精品亚洲а∨天堂免在线| 午夜精品久久久久久久| 亚洲国产岛国毛片在线| 日韩欧美自拍偷拍| 在线观看日韩国产| 成人精品在线视频观看| 久久精品国产久精国产| 亚洲国产精品天堂| 国产精品国产精品国产专区不蜜| 精品少妇一区二区三区在线视频| 日本韩国精品一区二区在线观看| 国产精品一二三在| 免费日韩伦理电影| 亚洲第一激情av| 亚洲男人电影天堂| 国产精品美女久久久久av爽李琼| 日韩欧美自拍偷拍| 欧美肥胖老妇做爰| 色欧美片视频在线观看在线视频| 丁香婷婷综合五月| 精品一区二区三区在线视频| 婷婷开心激情综合| 亚洲曰韩产成在线| 亚洲日本在线看| 综合激情网...| 国产精品久久久久一区 | 日本中文在线一区| 亚洲高清三级视频| 一区二区理论电影在线观看| 中文字幕欧美国产| 国产亚洲欧美激情| 久久久久久一二三区| 久久久久9999亚洲精品| 精品粉嫩aⅴ一区二区三区四区| 欧美一区二区视频在线观看2020| 欧美日韩国产精品成人| 欧美日韩视频第一区| 欧美三级电影一区| 欧美日韩国产经典色站一区二区三区| 欧美午夜精品免费|