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
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
|