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

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

?? quadtree.m

?? 一個(gè)功能強(qiáng)大的非結(jié)構(gòu)網(wǎng)格劃分程序,可實(shí)現(xiàn)網(wǎng)格的自動(dòng)剖分,及局部加密與質(zhì)量控制
?? M
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
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
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆swag| 美女视频网站黄色亚洲| 国产福利一区在线| 2014亚洲片线观看视频免费| 国内偷窥港台综合视频在线播放| 国产网红主播福利一区二区| 久久99精品一区二区三区三区| 性久久久久久久久久久久| 色综合网色综合| 樱桃国产成人精品视频| 欧美综合欧美视频| 蜜臀av一区二区在线观看| 精品电影一区二区三区| 国产ts人妖一区二区| 日本一区二区三级电影在线观看| 亚洲国产cao| 日韩欧美视频在线| 国产一区在线视频| 亚洲人精品午夜| 欧美日韩免费不卡视频一区二区三区| 欧美v日韩v国产v| 国产精品一线二线三线| 国产精品成人一区二区艾草 | 亚洲一区二区在线免费看| 欧洲精品在线观看| 毛片不卡一区二区| 中文字幕亚洲一区二区av在线| 日本va欧美va欧美va精品| 日韩欧美电影一区| 成人av第一页| 全国精品久久少妇| 国产精品久久夜| 91麻豆精品国产91久久久使用方法 | 国产传媒欧美日韩成人| 亚洲色图丝袜美腿| 日韩精品自拍偷拍| 色综合色狠狠天天综合色| 国内精品免费在线观看| 亚洲精品伦理在线| 精品成人a区在线观看| 色拍拍在线精品视频8848| 极品少妇xxxx偷拍精品少妇| 亚洲色图欧美激情| 久久亚洲春色中文字幕久久久| 久久99国产精品免费网站| 亚洲色大成网站www久久九九| 99精品国产热久久91蜜凸| 日韩av一二三| 亚洲视频一区在线观看| 国产欧美日韩综合精品一区二区| 国产高清久久久| 偷拍日韩校园综合在线| 亚洲精品乱码久久久久久 | 99精品偷自拍| 久久国产成人午夜av影院| 亚洲另类一区二区| 国产欧美视频一区二区三区| 欧美一卡在线观看| 欧美午夜电影网| 色女孩综合影院| 99视频国产精品| 国产激情视频一区二区在线观看| 中国色在线观看另类| 91精品婷婷国产综合久久| 色综合久久久久网| 成人精品视频网站| 国产麻豆精品久久一二三| 蜜臀精品一区二区三区在线观看 | 风间由美一区二区三区在线观看 | 另类的小说在线视频另类成人小视频在线| 欧美日韩一二三区| 一本色道亚洲精品aⅴ| 丁香五精品蜜臀久久久久99网站| 中文字幕一区二区三区乱码在线| 成人国产精品视频| 国产传媒欧美日韩成人| 久久se精品一区二区| 日韩高清一区二区| 视频在线观看91| 日韩不卡一二三区| 日日嗨av一区二区三区四区| 午夜一区二区三区在线观看| 一区二区三区中文字幕| 亚洲欧美福利一区二区| 亚洲欧美另类图片小说| 亚洲视频1区2区| 亚洲一区二区中文在线| 午夜精品久久久久影视| 性欧美大战久久久久久久久| 日本中文一区二区三区| 日本不卡高清视频| 韩国女主播成人在线观看| 韩国av一区二区三区| 成人一区二区在线观看| 99re成人在线| 欧美午夜免费电影| 欧美一区二区三区啪啪| 精品国产凹凸成av人网站| 国产婷婷色一区二区三区在线| 日本福利一区二区| 制服丝袜成人动漫| 欧美大胆人体bbbb| 欧美国产成人在线| 一区二区免费看| 青娱乐精品在线视频| 韩国精品一区二区| 成人av午夜电影| 欧美视频一区在线观看| 日韩三级av在线播放| 国产欧美一区二区精品性色超碰| 在线电影院国产精品| 欧美mv日韩mv国产| 中文字幕精品一区二区三区精品 | 蜜桃视频在线观看一区| 国产黄色91视频| 色av成人天堂桃色av| 日韩色视频在线观看| 国产精品免费观看视频| 无码av免费一区二区三区试看| 国产精品国产馆在线真实露脸| 26uuu精品一区二区在线观看| 欧美视频一二三区| 精品国产精品网麻豆系列| 欧美韩国日本不卡| 日韩中文字幕1| 成人免费视频免费观看| 欧美欧美午夜aⅴ在线观看| 久久精品视频在线看| 亚洲香肠在线观看| 国产传媒欧美日韩成人| 制服丝袜一区二区三区| 国产精品素人视频| 麻豆传媒一区二区三区| 91免费看片在线观看| 精品国产三级a在线观看| 亚洲在线成人精品| 豆国产96在线|亚洲| 3d动漫精品啪啪一区二区竹菊| 在线成人av网站| 国产精品毛片大码女人| 激情文学综合插| 欧美性感一区二区三区| 国产清纯白嫩初高生在线观看91 | 久久久久久久久岛国免费| 亚洲精品国产一区二区精华液| 亚洲精品成人悠悠色影视| 捆绑调教美女网站视频一区| 色婷婷国产精品综合在线观看| 欧美怡红院视频| 国产偷v国产偷v亚洲高清| 青青国产91久久久久久| 欧美午夜视频网站| 亚洲视频一二三区| 99久久久久免费精品国产| 久久久久一区二区三区四区| 香港成人在线视频| 欧美日韩综合在线免费观看| 国产精品久久久久久妇女6080 | 亚洲欧洲中文日韩久久av乱码| 亚洲精品老司机| 成人动漫精品一区二区| 欧美精品一区二区久久久 | 久久久久国产成人精品亚洲午夜| 国产欧美精品一区| 乱中年女人伦av一区二区| 91麻豆精品国产91久久久资源速度 | 久久久影视传媒| 青青草成人在线观看| 99久久99久久精品免费观看| 精品美女在线播放| 日本va欧美va精品发布| 日韩区在线观看| 免费在线看一区| 欧美一区二区三区四区五区| 亚洲成a人片在线不卡一二三区| 久久99国产精品久久99果冻传媒| 国产美女av一区二区三区| 精品国精品自拍自在线| 毛片不卡一区二区| 久久久五月婷婷| 风间由美性色一区二区三区| 午夜精品成人在线| 欧美美女网站色| 亚洲精品视频在线观看免费| 色综合一个色综合| 亚洲图片自拍偷拍| 欧美一级高清片| 日本不卡在线视频| 日韩精品一区二区三区在线播放| 成人免费一区二区三区在线观看| 亚洲二区在线视频| 欧美挠脚心视频网站| 人妖欧美一区二区| 国产日韩欧美不卡在线| 成人激情午夜影院| 亚洲视频在线观看三级| 欧美三区在线视频| 久久99日本精品| 18成人在线视频| 欧美日韩亚洲综合一区二区三区|