You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

76 lines
1.7 KiB

function res = quad2D(figNum,f,varargin)
% return quadrature of f on 2D region
% anticlockwise:positive clockwise:negative
% figNum ==1 triangle (x1,y1) (x2,y2) (x3,y3)
% figNum ==2 rectangle LeftUp (x1,y1) RightDown(x2,y2)
% figNum ==3 circle orgin (x,y) radius r
% figNum ==4 quadrilateral (x1,y1) (x2,y2) (x3,y3) (x4,y4)
% figNum ==5 NURBS 2Dplanar CP,W,Xi
if figNum==1
x1=varargin{1};
y1=varargin{2};
x2=varargin{3};
y2=varargin{4};
x3=varargin{5};
y3=varargin{6};
CP{1,1}=[x1 (x1+x2)/2 x2 (x2+x3)/2 x3 (x3+x1)/2 x1;
y1 (y1+y2)/2 y2 (y2+y3)/2 y3 (y3+y1)/2 y1];
W{1,1}=ones(1,7);
Xi{1,1}=[0 0 0 1 1 2 2 3 3 3];
end
if figNum==2
x1=varargin{1};
y1=varargin{2};
x2=varargin{3};
y2=varargin{4};
CP{1,1}=[x1 x1 x1 (x1+x2)/2 x2 x2 x2 (x1+x2)/2 x1;
y1 (y1+y2)/2 y2 y2 y2 (y1+y2)/2 y1 y1 y1];
W{1,1}=ones(1,9);
Xi{1,1}=[0 0 0 1 1 2 2 3 3 4 4 4];
end
if figNum==3
x=varargin{1};
y=varargin{2};
r=varargin{3};
t=sqrt(2)/2;
CP{1,1}=[x+r x+r x x-r x-r x-r x x+r x+r;
y y+r y+r y+r y y-r y-r y-r y];
W{1,1}=[1 t 1 t 1 t 1 t 1];
Xi{1,1}=[0 0 0 1 1 2 2 3 3 4 4 4];
end
if figNum==4
x1=varargin{1};
y1=varargin{2};
x2=varargin{3};
y2=varargin{4};
x3=varargin{5};
y3=varargin{6};
x4=varargin{7};
y4=varargin{8};
CP{1,1}=[x1 (x1+x2)/2 x2 (x2+x3)/2 x3 (x3+x4)/2 x4 (x4+x1)/2 x1;
y1 (y1+y2)/2 y2 (y2+y3)/2 y3 (y3+y4)/2 y4 (y4+y1)/2 y1];
W{1,1}=ones(1,9);
Xi{1,1}=[0 0 0 1 1 2 2 3 3 4 4 4];
end
if figNum==5
CP{1,1}=varargin{1};
W{1,1}=varargin{2};
Xi{1,1}=varargin{3};
end
CPW_my_format=extract_my_format_from_NURBS(CP,W,Xi);
[xtrue,ytrue,wtrue] = SPECTRAL_quads(CPW_my_format,55,55);
res=arrayfun(f,xtrue,ytrue).*wtrue;
res=sum(res);
end