.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$',./$',(
&291e1i4$'1,@*g(h!#"%$'&)(*+$-H,@/$-,;*!M1?K$'&$'*Iu(
u(*47!891$5Cb(!#"@$'&)(*!1F_:@<2&21!1?'<D*3{k
1,F@h$-,@*CNe@?K$54(*3$'9,CL*!M@$5CC(&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 *EmEAF@1C43$':1)(D47!8H1E?'<9$',.B$-,VHSFH$'&21,C$'9,(#?bC3(941_*3<%@$54(#?K?'<9IB@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¢¬¤«TN 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?'1GH11@$-,.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<bLT9O1i4$'1,4<cI
*!M97.HM6(7*!9&)(h*!1F2M17+$C+*3$54A*1C3*Cb(1g(#8($®?5(:@?'1_ $',[email protected],³1*(#?Nb´9´9µyN
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,CLOM@$'.9M478(*!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£*!M143$'*!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+*mu(*N n M
1 !1j(h!1j(k,@7&:1M173$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 HI4M@%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$541CL°9
º("@$'&)(*!1²4?K?K$',1(3$'*3<9I*M(*k$5C © ©
© k© $5Ck18(#?'7(*!1FB{k$'*!M6© ¢= fI%©
¢= ;
(,FD© ¢= #N n M@$C|u(*!,1CC((?®?'1?8914*!9 *1C3*b&)(#<2*(hG91A(£,%7&:1LL°H!&)C
*!M1A(h,.?'1 © © © $C4?'%C31£*!D!9#"#N
© ?K$-1C`,1(b*M14M9F © ©
%$ © '& © $(%$ © )& © $ $5C(!#"%$'&)(h*!1?'<)1lH7(#?*! $ © '& © $*
²(,F_# (h!1A(!#"@$-&_(*!1?'<)(h(#?K?'1? N
*!M1A47891#+×Ck*(h,.91,%*Cb(*k I9;
n M1?5(9C+*k$5CbL8(?-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(zu(*!,1C!C`*!1C3*`$5CeC!(h*3$5CQ1FmN ¶ ,;L (H4*I*!M1
M173$5C3*3$54aL(#$K?5CC+M97@?5FV*!M1_47!89127,F@7@?5(*!16(?-H,.6*!M1$',@*!1!8(#?b7,F@149,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
,
{|~}:BEl&'&'
l&
K[V'
O
':9,-lKd!l&')
yRBE5V
SGg|lBE
Kl&'
_&'
[V
l1BE
:&
KV
{|~}BEl&'_&
Kl&'
95V
{|~}BE_&&'
_&
K[V
Dj q9NMcGa<:k{|}:9BE&h9&yRBE9V'&yeBhVV87w?*Q-
<
X.Q,.-
,68Lh0xc_Ga<:|L,.-,.'5?GY
:,.K_
<NN9+=l69l[vU4`=:9@XSD
'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*`b4Al[ve¥¦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{l6°lBEl&'&'
l&
K[V'
SG]1±9²K¨:³°l{BE
l&'
V
:K³9BE
V
3O
'?:,´-:4(µe&'
9)
¶£®RBE5V
°l|K{:°BEl&'_&
Kl&'
95V
°l|K{:°BE_&&'
_&
K[V
4
Dj q9Np¯GI<:Z°l|K{:°BE&h&®RBEV'&®rB'hVV]4-
<
Q9YQ,.-
,68+MLchP9<N.4::1-St«®RB'h?V«,M<:]=:X-zt-F/0 4:?g
,.-,.'
n<
8
Yz
':M`9
^+l1MGa<:ee
<
@-
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
±²1BEl&'&'
l&
K[V'
O
':9,-lKd!µ &'
9)
yRBE5V
SGg|lBE
Kl&'
_&'
[V
<
$
K
<
k±9²:BEl&'_&'
l&'
5V L±9²:BE_&'&
K_&
[V
o <:789:.,/=l+6<:J=:J<-:9L,.p?GQ=:
/LK0xck
NU-:
',.
¤`G:4<
R ]-:
'?,.
e<g1:N4c
7-::9N
t
YkJ@
NNAL<
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
04
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.,zYw*bA-
K10cfg
UGI9
g<:
.
bcJ
D9,.:@:6^<
PR+.U@S/,z9S:J_
=
'
/ 9,.:E89ePg
bc
q9.z-
Y9
X
'7
¤kW85p:C-:<:Ut,z-80
xc?'7
<:<
³:[Jw+{° 6A9K'68N_-:
',.
<:
'9: e& :& 4?GªyRBDV'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 {|}:P4bdwS+bc<:
c
:JGa<::z±:|}}e|PRb4A,z-<M+K9
'9:UGQZ-:?8.J+<
-::9NMpX-:
,.
]<P::.l1Pb4Z-:
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:[1C?:³K_ -:
',z
'X5.-4
/_-:?8
|{ P1SbcN+N
U-:
'?e0XjDS 9P8q9N_|K{ KBEl&'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
kQD0Rhii9V x 0;l:N
eP=<0?>K:¤Pv?:@<01Q6FD0 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@,.-SSve
a668<:?
<N9<:6F¤789e0
LM0!"ON=8
P:i$B #V'P 9h #(H99:3
P >-,M=:
Mhii90
© Copyright 2026 Paperzz