Adaptive Sampling of Parametric Curves

.1
Adaptive Sampling of
Parametric Curves
Luiz Henrique de Figueiredo
IMPA, Instituto de Matematica Pura e Aplicada
Rio de Janeiro, Brasil
Introduction
!#"%$'&)(*+$-,./(0((&21*3$54647!891;:%<=(>?'<@.99,(#?A47!891B$CD(>(94*3$54(#?E7,F@1!*(GH$',.I
$',%8H?'89$',.=(JC!(&2@?K$',./LA*!M1;((&21*1)F@9&)(#$',ONPRQC3*!ST3$',4$'@?'1CVU@WX Y[ZH\]^C!(&2@?K$',.
C3*!(*!1.9<_!1&)(#$',C`*!M1A&a%C3*bc97@?5(Ned`,@LT9!*!7,(*1?-<9If$'*g4(h,6!891E891<_$-,1iD4$-1,@*$KLjM@$'.9M
!14$5C$'9,;$5Ck!1lH7@$'!1FmN
n M@$5Ck.91&o!1C31,@*Ck(,qp9r9psutTXwvxk&a1*!MyFzLT9jC!(h&2@?K$-,.a*!M1gF@H&)(#$',){|$-*M)!1C+14*k*!E?'4(#?
4 7!8(*!7!19N~}%(h&2@?'1C649,41,@*!(*+$-H,=$5Ca$',!H9!*+$-H,=*!/*!M@$5CD47!8(*!7!19I`!1C37@?'*3$',./$',€(
&291e1i4$'1,@*g(h!#"%$'&)(*+$-H,@‚/$-,;*!M1?K$'&ƒ$'*Iu(…„u(*47!891$5Cb(!#"@$'&)(*!1F_:@<2&21!1?'<D*3{k
1,F@h$-,@*CN†e@?K$54(*3$'9,C†L*!M@$5C‡C(&2@?K$',.ˆC3*!(*!1.9<9I$',4?'7FH$',.ƒ(9C3*!1+$-‰(h*3$'9,ˆ(,Fƒ(4Š?'1,.9*!M
((h&21*!3$'‰(*3$'9,OIc(!1A(#?5C3)FH$5C!47CC31FmN
Uniform Sampling
1 *EŒŽ‘’“”m•—–E˜AF@1C43$':1)(D47!8H1E?'<9$',.B$-,V™HSšFH$'&21,C$'9,(#?bC3(941_›š*3<%@$54(#?K?'<9I‡™Bœ@žN n
‹ (!#"@$'&)(*!1ŸŒ I4M%%C+1|¡a1lH7(#?K?-<2C3(H41F2C!(&2@?'1kh$-,@*Cސ£¢=¤¥b¦/¤!¥b¦§#§§9¦/¤¨2¢€“HI{bM@$54!M
F@1Q,1_*!M12891!*+$41C£©ª’© ¥ ’§§#§!’© ¨ IO{`M1!1)©#«b¢¬ŒŠ›š¤«TžN n M1D4M(#?K?-1,.H12$5C£*!64M%%C+1)C!(&2@?'1
h$-,@*C¤¥u§§#§š¤¨){`M@$4M;$',F@741)(ƒ.9@yF;(!#"@$-&_(*3$'9,q{bM@$K?'1ˆGH11@$-,.6¡JC3&)(­?®?šN¯61*MyFC`L
7,@$KL°H!&±C(&2@?K$',.e&2@C3*mL°*1,A4!M@%C31²¡ƒ:@<*!3$5(#?y(,F1!9Ž›š*(9FH$',.e(9447(H4<bLT9O1i4$'1,4<cžI
*!M97.HM6(7*!9&)(h*!1F2M17+$C+*3$54A*1C3*Cb(1g(#8­(­$®?5(:@?'1_› ‹ $',[email protected],³1*(#?šNb“´9´9µyžN
Adaptive Sampling
¶ F@1(­?®?'<9IŠ(2,9,ST7,@$KLT9!&·((&21*!3$54£C!(&2@?K$',.6.$'891C`3$5C31ƒ*!)(q¸7,@$KLT9!&)¹a891!*!1"614$Cº$-H,OI
?'1(9FH$',.2*!$',4!1(9C+1FDC!(&2@?K$',.2F@1,C$'*º<z$-,_!1.$'9,C†LOM@$'.9M478­(*!719N n M1.91,1(#?&21*MyF
F@1C!43$':c1F6M11E$5Ck:(9C31FB79,;*!M1LT?K?-{k$',.DC3*!(h*!1.9<m
Å
1
¥šÆºÆÇmÈ
ªTÜ ¥šÝ ÜKÞÞÞÞÞ%Þ@ÜKÞ
» ¼3½3¾3¿'À ÁºÂ3ÃÄ
9
¾ É ÄšÊË!ÌTÍ À ÄÎ ¿ ÌTÏ'ÏTÐÑ®ÒÄ3Ó
‡
ÉÔ Ô¿'À Á3Â3Ã Ï ¼Õ­¿ Ì ½!¿¼ Ë!Ö!Ä Ã'À ¼ Ò À Ò²ÊÒ ¾OÕ×¼3¿ Í ¿ ÌTÏ'Ì ¿'Ø ÌTËÓ
Ñ'Ù3Ú9Û
2
“9Nb4M@%C31ˆ(ƒ43$'*!1+$-H,DLT9b!1Q,@$',.DC!(&2@?'1CN
µNk18(#?'7(*!1£*!M1ˆ43$'*!1+$-H,69,D*!M1$',@*!1!8(#?šN
NŸ$KL2*!M1V47!891;$5CD(#?'&2%C+*_„u(*2$',*M16$',@*!1!8(#?šIe*M1,*!M1VC!(&2@?'1;$5C_.$'891,:@</$'*C_*3{k
1"*!!1&a1C
NkH*!M1!{k$5C319IFH$'8H$5F@1ˆ*M1$-,@*!1!8(#?m$',%*!a*º{kƒ(!*Cj(h,F_!147C$'891?'<6C!(&a@?-1E*M1E*º{kƒ(!*CN
1‰$'1e47!8H1CIC3*!9@$',.
n M@$5CbC3*(*!1.9<z$C`C$'&ƒ$K?(he*!ƒ7C$',.2*M1AF@1 j(9C3*!1? !(7D(#?'.993$'*!M&~LT9
{bM1,£*!M1j49,@*!!h?%?'<@.99,…$CŠ(#?'&2%C+*m„u(*N n M
1 !1j(h!1j(k,@7&ƒ:1ŠM173$5C3*3$54k!1Q,1&a1,%*Ž43$'*!13$5(
(@?K$54(:@?'12*!ƒ.91,1(­? 47!891CN
Refinement Criteria
n M1Ÿ!1Q,1&21,@*²43$'*!13$5(1&2@?'<91F£M1!19I*!1!&21Fgsu\3Z XwW HI­4M@%C31CŽ(,…$-,@*!1!&a1FH$(h*!1k$',@*
{k$'*!M@$',D*!M1`$',%*!18­(#?‡hL 4H,C$5F@1(*3$'9,V c’ ”N `1"y*IH$'*k*!1C3*C†*!M1E*!M!11E4(,FH$5F(*!1E8H1!*3$541C†L°9
›º("@$'&)(*!1ž²4?K?K$',1(3$'*3<9I*M(*k$5C © ©
© k© Ž$5Ck18(#?'7(*!1FB{k$'*!M6© ¢=ŒŠ› fžI%©
¢=ŒŠ› ;ž
(,FD© Ÿ¢=ŒŠ› #žN n M@$C|„u(*!,1CC›š((­?®?'1?Ž8914*!9ž *1C3*b&)(#<2*(hG91A(£,%7&ƒ:1LŠL°H!&)C
*!M1A(h,.?'1 © © © $C4?'%C31£*!D“!9#"#N
© ?K$-1C`,1(b*M1ˆ4M9F © ©
%$ © '& © $(%$ © )& © $ $5C(!#"%$'&)(h*!1?'<)1lH7(#?‡*! $ © '& © $*
ž²(,F_ŒŠ›# ž (h!1A(!#"@$-&_(*!1?'<)(h(#?K?'1? N
*!M1A47891#+×Ck*(h,.91,%*Cb(*kŒŠ› žI9ŒŠ›;
› n M1?5(9C+*k$5CbLŽ8­(­?-71£{bM1,³(a4?-@C31F@SwL°H!& 1"!1C!C$'9,BL°9`Œ,‘+ CjF@1+$-8(*3$'891…$C(#8­(#$K?5(:@?'19NKž
`?-*M97.9M ,9*61lH7@$'8­(#?'1,@*q$',€*!M1H!<9I1&2@$'3$54(#?2(94*3$541/C3M{eCD*!M(h*D*!M1C31V*!1C+*C6(1
1lH7(#?K?-< 1.O
- 14*3$'891q$', ?'4(*3$',./!1.$'9,CBLE?'{ 47!8­(*7!19N n M1>(h!1(/43$'*!13$'9, $5CD*!M1V(#?'S
.99+$-*M&)C/@
+ &21*!MFDL²4M$541ˆ(9C†$'*e1l97@$'!1C`,)C!lH7(!1E!@9*CN
*!M1A(h!1(ƒLŽ*!M1E*!3$5(,.h?-1ƒ© © k© Ž$5CC3&)(#?K?
Choosing the Interior Point
0+
1
( ¥
#žN n M1`$',%*!7@$'*3$'891A4M$541`L°9Ÿ*!M1`$-,@*!13$'9kc$',%* o$5CŸ*!M1`$-,@*!1!8(#? ×CŸ&ƒ$5F@$',@*I R¢ Ý ›
3C 7:*3?'1kLT9!& hL C!(&a@?®$',.ƒ1!!HI9bp KXwp [XwW mI9(h3$5C31CŠ*!M1k!9:@$',.ˆC+*!(*!1.H<ˆ49,C$5F@1CŸ(E47!891
¸„u(*¹ƒ*!M!97.HM97*e*M1E$',%*1!8­(#?e Dœ=¤œ ”O{bM1,V(z„u(*!,1C!C`*!1C3*`$5CeC!(h*3$5CQ1FmN ¶ ,;L (H4*I*!M1
M173$5C3*3$54aLš(#$K?5CˆC+M97@?5FV*!M1_47!89127,F@7@?5(*!16(­?-H,.6*!M1ƒ$',@*!1!8(#?b7,F@1ˆ49,C$5F@1(h*3$'9,ON n M1
C$',@7C3$5Fq47!891) ¤’Cº$-,m›¤!žš”O{|$-*M³¤bC!(h&2@?'1F6(*
;$5C(21(9F@<D1"f(h&2@?'19N b1!19Ic1891!<D8H1!*!1"
© « ?K$'1CE(#?'9,.2*M1 Sš(#"@$5CN ¶ ,;.91,1(#?šI(h,%<DF@1*!1!&ƒ$',@$5C3*3$54£!9:@$',.a$5Cb8@7@?',1(:@?'1ƒ*!)(#?K$5(9C$',.N
(,F@H& !H:@$-,._(#?'9,.2*!M1$',@*!1!8­(­? (#89$5FCb(#?K$5(9C$',.DC!(&2@?K$',.F@71£*!2C374M6C3<%&a&21*!3$'1C
$', ŒŽN_}$',41DC!(&2@?K$',.q,1(E*!M1ƒ$',@*!1!8­(­? ‘CA&z$F@c$',%*£$5CAF@1Cº$-(:@?'19I²(D7,@$KLT9!&
FH$5C3*3$':7*3$'9,
&)(#<J:1q:@$5(9C31F *!{b(F0*!M@$5Ca$-,@*!13$'9#N ¶ , *!M@$5Cƒ$'&2@?'1&21,@*(*+$-H,OIg(>7,@$®LT9!&
FH$5C3*3$':7*3$'9,
>
4
#2 3 5
76980:
=<
?+
;
.1 Adaptive Sampling of Parametric Curves
3
!"$#%&'"(%%)*+,.-/10324
56
789:+,/;7<=:<
> ?<:@A9
=<:CBDEF/HGI9<:J=K/L<,.,MN
:,O
=P*=K/J
<+GQ
'RS8,T8U
,CVW
X<:U,Y<-Z-
=:[0Q\]
X:9N+N
^9_,/
Z=:`.-
Ga
S8/Z
*
bcd<:M+`
<
@Q<:+GeN
c
'
Bfg:?:98
5hiiV0kj@L-
'P*+=:
/J
<
'@A,.+-
7KJ=l6bm-
n9<:`
7<80
The Algorithm
o 9
4pq9`Grs+8:/P1
N`p?,.-S8N+.:4X
X
t+<:ZGa
c
u 474`Zp-lK`?GW<=v99wE89ePr7<k
<
'@_'qU-0`xc`<
:RyUR6<:Ut:/p9:WRY,z-8c-lK0]xcc-:<:gGa
R4N
,
{|~}€:‚BEƒl&'„&'…ƒl&…K„[V'†
‡‰ˆO
':9,Š-lKd‹!ƒl&'„)
…‡ŒˆŒyRBE‡5V
SGg|ŽlBE…Kƒl&'…‡_&'…„[V
l1‚BE…ƒ:&…K„V
{|~}€€€‚BEƒl&'‡_&…Kƒl&'…9‡5V
{|~}€€€‚BE‡_&„&'…‡_&…K„[V
Dj q9NMcGa<:k{|}:‚9BE&h9&yRBE9V'&yeBhVV87w?*Q-
‘<
X.Q,.-
,68’”“–•L“—h0˜xc_Ga<:™|ŽL,.-,.'5?GY
š:,.K_
<NN9+=l69›‘l[v‚U4`=:9@XSœD
'bcN+-:
'?e0
 Z:M.N
78,žN9
'U-:?8'ULZt:M
'
M/<
N_
<
PXM_
<
@58,z-8,zK'?-:
Ga
,ZJ-œŸš:
'k?
'GpC8
¡0.¢-
9-:
.-'?ePeZN
,£-:
Ga
,Uk9
M
'7
¤?GW
<
P*`b4Al[v‚e¥¦l|R§E¦9¨ª©Z
=:Z:Kz-Ft.9
pZU‘€|6Ž]¥¦:|R§E¦}d§E¦9¨ª©
668<:?«9¬7R-Ft0]­4
PBE9
Ve®7<=:<lGa
1'RK<9<:«<
-:?
ey]0
xc`-:<:T?--:
'¯=:bp0
°l|K{Žl‚6°lBEƒl&'„&'…ƒl&…K„[V'†
SG]1‚‘±9²K¨:³°l{BE…ƒl&'…„V
:K³9ŽBE…ƒV
‡3ˆO
'?:,´-:4‹(µe&'…9)
…‡¶ˆ£®RBE‡5V
°l|K{Ž:‚°BEƒl&'‡_&…Kƒl&'…9‡5V
°l|K{Ž:‚°BE‡_&„&'…‡_&…K„[V
4
Dj q9Np¯GI<:Z°l|K{Ž:‚°BE€&h&®RBEV'&®rB'hVV]4-
<
Q9YQ,.-
,68+M“L•c“™hP9<N.4š::1-St‘«®RB'h?V«,M<:]=:X-zt-F/0  4:?g
,.-,.'
n<
8
Yz
':M`9
^+l1‚MGa<:e›e
<
@‹-
Q
,M+=/Y9-/+
<e0
Applications
-,.-SNA
Nz,/L=:- Lk-
=,z™
š:wCG
<,.
cKN9
'ePgn9<:
'?<
.GXt‘-S.Ga<::PRS+N
'?‹9
Y
'TN
-:
'?,.
¤e0*xc`-:<:‘UGa
4,.-<NZXNk?G .<
X†
€‚±Ž²1BEƒl&'„&'…ƒl&…K„[V'†
‡‰ˆO
':9,Š-lKd‹!µ &'…9)
…‡ŒˆŒyRBE‡5V
SGg|ŽlBE…Kƒl&'…‡_&'…„[V
<
$…K„ …ƒ
<
k‚‘±Ž9²:BEƒl&'‡_&'…ƒl&'…‡5V L‚‘±Ž9²:BE‡_&'„&…K‡_&…„[V
o <:789:.,/=l+6<:J=:J<-:9L,.p?GQ=:
/LK0‹xck
NU-:
',.
¤`G:4<
R ]-:
'?,.
e<g•1:N4c
7-::9N
t … YkJ@
N™NAL<
0´xc+< +Gp<_ 9N'
,789B > <K
4: ]
`hiiV0
o :S/P`-:/N:XSk9N¤™
+,ZK<:6F/
?<,7w6F/ BD0$N:0P*<:@N;?
,N+N9 A68N9
,+Vp<:7<:S8/: w?
N+<,Y=l
?GQ
0­4
P*
š:N
789+,/Y=l`<:ZU_BD
,.V«/.
<:?Kc
t … ASF
Xbc
=
'qN`
… … 0]xc4@¤4G:c=
'9q78NX
vM:QNp=:X,.-<
?-`GD5<:@N=:
/+
<
'@e0*jDkwdN<P1k-789Y,z-8 <N
.
¡X
*X,.Y9,.,./M,.-/U9N'v
N
'?-K/MBD\d66FNK?,
:Z¢/K`hii9V'0
Implementation
,.-,.'+?GªQ-`,z-FN.,z‘Yw*bA-
K10cfg
UGI9
g<:
.
bcJ
œD9,.:@:6^<
PR+.U@S/‹,z‘9Sš:J_
=
'
/ 9,.:E89ePg
bc
q9.z-
Y9
X
'7
¤kW85p:C-:<:‘Ut€,z-80
xc‹?'‹7
<:<
³:[ŽJw+{ް 6ŽA9K'68N_-:
',.
<•:
'9: e& :& 4?GªyRBD•V'0ej@*w*<:z`:<
Q:?gyzw*
c<:z,.
4:.:
g/M-:0 _
KR-
998NMs W]`c
<:<
4
Q6w7`-
1›
,
Kc.:
9p-
9N
',˜
/0
.1 Adaptive Sampling of Parametric Curves
5
x +
5Z_
<
'@?,.-S8N GI<:789 {|}:‚P4bdw™S+bc<:
œ
c
š:JGa<::†z±:|}}e|PRb4A,z-<M+K9
'9:UGQZ-:?8.J+<
-::9NMpX-:
,.
]<P::.l1‚Pb4Z-:
Ga
,ZRcSpN,.]
:
œ
N:0gxcdGa<:+‘€|Žp,.-,.'X`
š:,zKQ
78
+=:zZ
N`
P<:@N
p
c-
<:pB@`<:
œD<--S5
':UŽ‘³Tw¯<:+bc_4V'0
xc_‘5:M=:b4
JGa
E8,z-F/;: -
'e0
-
<:
'@
-:7`zGI<:789:p±l|}K} |‘PR:[1‚C?:޳K_ -:
',z
'X5.-œŸ4
/_-:?8
|{ ‘P1SbcN+N
U-:
'?e0XjDS 9P€8q9N_|K{ KBEƒl&'„V]=lN:`M-
,z-FNZG]p<
MN.X
66W!ƒl&'„)D0
/* aspc.c -- generic adaptive sampling of parametric curves */
typedef struct point { double t,x,y,z; } Point;
#define
#define
#define
#define
T(p)
X(p)
Y(p)
Z(p)
((p)->t)
((p)->x)
((p)->y)
((p)->z)
extern void gamma(Point* p);
extern void line(Point* p, Point* q);
/* user supplied */
/* user supplied */
static void sample(Point* p, Point* q)
{
Point rr, *r=&rr;
double t = 0.45 + 0.1 * (rand()/(double) RAND_MAX);
T(r) = T(p) + t*(T(q)-T(p));
gamma(r);
if (flat(p,q,r)) line(p,q); else { sample(p,r); sample(r,q); }
}
static int flat(Point* p, Point* q, Point* r)
{
extern double tol;
/* user supplied
double xp = X(p)-X(r); double yp = Y(p)-Y(r); double zp
double xq = X(q)-X(r); double yq = Y(q)-Y(r); double zq
double x = yp*zq-yq*zp;
double y = xp*zq-xq*zp;
double z = xp*yq-xq*yp;
return (x*x+y*y+z*z) < tol;
/* |pr x qr|^2 <
}
void aspc(double a, double b)
{
Point pp, *p = &pp;
Point qq, *q = &qq;
srand(time(0));
T(p)= a; gamma(p); T(q)=b; gamma(q);
sample(p,q);
}
*/
= Z(p)-Z(r);
= Z(q)-Z(r);
/* entry point */
/* randomize */
/* set up */
/* sample */
tol */
6
Bibliography
Bfg:?:98
Mhii9V
0d0fg::9
0
<
@gn<*Ga
e
:
78N`-:?
',.
7w*<
0
!" Peh[#B$#%#€V'†$#'&&(K#)&6iPhii0
B > <K
X: ]
`hiiV+*Q0 > < .:
0 ]
0_f*,.-<N_+
'T8N9LG
+01234567181) P1hB#V'†7&9(&:P _/
-:
',.
Q<
90-,/..-. hii0
B$;l:N
kQD0Rhii9‘V x 0;l:N
eP=<0?>K:¤Pv?:@<01­Q6FD0 fg<
U_
<Np,.-SN:0j@BAM0Cd
q1P9
P 012DE ,/,,'P-:N=9F39G(H9F%€0 ,M
]
[H
P **K7ePehi9i 90
BD\d6SNK, ?:Z¢;/K^hiiV J04\d6SNK, :I<0JAM0d¢K/K?0 xcKAX<N7œ
R<:q
_N
, GI9
ZFA@,.-SSšve†
œa668<:?”
<N9™<:6F¤789e0
LM0!"ON=8
P:i$B #‘V'P† 9h #(H99:3
P >-,M=:
Mhii90