Document 12969618

advertisement
 ! The Boolean engine of HP PE/SolidDesigner applies standard and
nonstandard Boolean set operations to solid models to perform an
impressive variety of machining operations. Parallel calculation boosts
performance, especially with multiprocessor hardware.
" %&+&+$ ,-"/1&,+0 )&(" -2+ % ,/" +! ,1%"/0 -)6 +
&*-,/1+1 /,)" &+ 1%" #2+ 1&,+ 0"1 ,# ,+1"*-,//6 0608
1"*0 + ,)&!"0&$+"/ 1%" &*-/"00&3" 3/&"16 ,# *8
%&+&+$ ,**+!0 /" !/&3"+ 6 0&+$)" 1,-,),$6 "+$&+"
,#1"+ /"#"//"! 1, 0 1 *&$%1 0""* 1%1 1%" )$,/&1%* 20"! 6 1%" ,,)"+ "+$&+"
4,2)! " "51/"*")6 ,*-)"5 +! "0,1"/& +! 1%&0 &0 &+!""!
1/2" &+ 0,*" /"0-" 10 %" 2+!"/)6&+$ -/&+ &-)"0 %,4"3"/
/" 0&*-)" ,01 ,# 1%&0 /1& )" !"*,+01/1"0 1%&0 6 1(&+$ #&/)6 &+12&1&3" ),,( 1 1%" &+1"/+) * %&+"/6 %&0 4&)) -/,8
3&!" /,! *- #,/ 1%" 0" ,+! *,/" 1" %+& ) -/1 ,# 1%"
/1& )" &+ 4%& % 0,*" ("6 )$,/&1%*0 /" "5-)&+"! &+
$/"1"/ !"-1% &+))6 0,*" 2+202) --)& 1&,+0 ,# 1%"
,,)"+ "+$&+" /" /&"#)6 *"+1&,+"!
"#,/" "5-),/&+$ 1%" &+1"/+)0 ,# 1%" ,,)"+ "+$&+" )"10
1(" ),,( 1 1%" ,'" 10 1%1 &1 4,/(0 ,+ %"0" ,'" 10 /"
))"! 0,)&!0 ,/ 0&*-)6 ,!&"0 ,)&!0 &+ ,2/ 1"/*0 /"
*1%"*1& ) ,2+!/6 /"-/"0"+11&,+ 8"- *,!")0 ,#
$",*"1/& ,'" 10 &$ 0%,40 8"- *,!") ,# 6)&+!"/
02))6 0"3"/) 1"$,/&"0 ,# 0,)&!0 /" !&01&+$2&0%"! 0"!
,+ 1%"&/ *+&#,)! %/ 1"/&01& 0 ,/ ,2/ -2/-,0"0 4" '201
+""! 1, (+,4 1%1 0,)&!0 /"-/"0"+1 /") ,'" 10 +!
Body
Shell
Face-1
Face-3
Face-2
Loop-1
Loop-3a
Loop-3b
Loop-2
Coedge-1
Coedge-2a
Coedge-2b
Coedge-2
Edge-1
Edge-2
Vertex-1
Vertex-2
,2+!/6 /"-/"0"+11&,+ 8"- *,!") ,# 6)&+!"/
1,"/ "4)"118 (/! ,2/+)
0 /"4!/&3"/ /"-/"0"+1&+$ 1%" )00 ,# *+2# 12/)"
,!&"0
0,)&!0 /" &*-,00&)" &+ 0,*" 46 +&#,)!
,!&"0 /" ,# $"+"/) &+1"/"01 0&+ " 1%"6 + " *+2# 8
12/"! &$ 0%,40 0 /"4!/&3"/ /"-/"0"+1&+$ 1%" )00 ,#
*+2# 12/)" ,!&"0
%" )00 ,# +,+*+&#,)! ,!&"0 &0 1%" /")* ,# 1%" &*-,00&8
)" ,!&"0 %"0" ,!&"0 ++,1 " *+2# 12/"! " 20"
1%" *1"/&) 1%& (+"00 $,"0 1, 7"/, 1%1 1%" 1%& (+"00 $,"0
1, 7"/, &0 ,+0".2"+ " +,1 20" ,# 1%" +,+*+&#,)!8
+"00 "3"/1%")"00 1%"6 %3" %3" 0,*" &*-,/1+ " 0
,+ "-12) 01/ 1&,+0 ,/ 0&*-)&#& 1&,+0 ,# /") *+&#,)!
0,)&!0 ,+*+&#,)! 0,)&!0 0,*"1&*"0 /" ,+3"+&"+1)6
$"+"/1"! 0 + &+1"/*"!&1" 01"- &+ 1%" !"0&$+ -/, "00
%"6 /" )0, &*-,/1+1 1, 3/&,20 0&*2)1&,+ --)& 1&,+0
+! 0,*"1&*"0 1, #&+&1"8")"*"+1 +)60&0 +! * %&+&+$
&$
0%,40 0")" 1&,+ ,# +,+*+&#,)! ,!&"0 , 1%" )"#1 &0
,!&"0 1%1 /" +,+*+2# 12/)" " 20" ,# )"#1 7"/,
1%& (+"00 &+ $"+"/) "+1"/ 7"/, 1%& (+"00 1 "!$"0 +! /&$%1
7"/, 1%& (+"00 1 3"/1& "0
1"#" "- 4,) ."#%(-- #( !(,& " '#&
-)&# #- "0#(! 4,) ."#%(-- . !-
( ." ,#!". -)&# #- "0#(! 4,) ."#%5
(-- . 0,.#-
" ))&( (!#( #( #.- # ,(. !/#-- #- /- .) "(!
)#- 3 ." ,/&- ) ))&( -. )*,.#)(- ( ).",
1),- #. #- & .) )'#( .1) 0)&/'- /-#(! )( ) ."
.", -.(, )*,.),- -/.,. /(#. ), #(.,-. "
)*,.#)( #- *, ),' )( -)&#- #( ." -' 13 - )( ."
-.- ) '."'.#& -. ."),3 " .- ) ." -.(,
)*,.#)(- )( -.- ( 0)&/'- , #&&/-.,. #( #! "
.1) )#- . ." .)* ) ." *#./, , )'#( #( .",
13- /-#(! ." .", -.(, ))&( )*,.#)(- "
,-/&. ) " ))&( )*,.#)( #- -")1( . ." )..)'
)1 .". 1 , +/#** 1#." ." ,#!". %!,)/( 1
( 2*&), ." 0,#)/- -.!- ) ." ))&( &!),#."'- )
) ."#- 1 1#&& /- .")/!". 2*,#'(. -/" 2*,#'(., 1#&3 %()1&! - - ( "* ) *, ),'
."#- 2*,#'(. 1 )(&3 ( -)' *#(. -",* %(# (
-)' #'!#(.#)(
Coloring. ( ." #,-. -.! )." -)&#- *,.##*.#(! #( ."
))&( )*,.#)( , #&& 1#." # ,(. )&),- &.- -3
3&&)1 ), )( ( &/ ), ." ).", #! -")1- .1)
)#- .". "0 ( -. /* ), ))&( )*,.#)( (
)&), ),#(! .) )/, ,/& .- --/' .". /(&#% ,&
-)&#- ."3 ( *,'. " ).", 1#.")/. *,)&'-
#( ." ))&( )*,.#)( "-(. ( *, ),' 3. ."
*#./, -.#&& -")1- .1) #-$)#(. -)&#- .". $/-. "**( .)
)0,&* ) -")1 1".- !)#(! )( #(-# ." )#- ."
3&&)1 )3 "- ( ' .,(-*,(.
)1 1 ',% ." &#(- 1", ." .1) )#- *,'.
" ).", &.- -3 1#." , )&), " , &#(- #( #!
, && ." " .1) -)&#- , -.#&&
#-$)#(.
Union
1) #-$)#(. -)&#- .". "**( .) )0,&*
Making Soap Bubbles—Cellular Bodies. ( ." -)( -.! 1
)." -)&#- .)!.", /-#(! ." #(.,-.#)( !,*" -.,/./, 0,3 -#'#&, .) .")- ),' 3 -)* /&- #,. - -")1( #( #! " .1) -)&#- ()1 "(! .)5
!.", . ." #(.,-.#)( !,*" ( ." -* 1", )."
)#- )0,&* !,( )&), ( -( "#- #- ." '#25
./, ) 3&&)1 ( &/ ) !. .., 0#-#)( ) ." !)5
'.,# -#./.#)( -)' - "0 ( ' .,(-*,(.
Intersection
Subtraction
-/&.- ) **&3#(! ." -.(, ))&( -. )*,.#)(.) .1) -)&# )#-
(.,-.#)( !,*" ,
.), 1&..5%, )/,(&
342"*()4 ,*.& $*2$,& &,,*03& /2 30,*.& . 4)& '/,,/7*.( %*3$53;
3*/. 4)& (&/-&42*$ 35#$,"33&3 "2& 53&% '/2 *,,5342"4*/. 052;
0/3&3 #54 4)& //,&". ",(/2*4)- *43&,' %/&3 ./4 %&0&.% /.
".9 30&$*'*$ (&/-&429 490&3 3*.$& *4 *3 *-0,&-&.4&% *. "
(&.&2*$ 7"9
"$) (&/-&429 $,"33 )"3 " $/22&30/.%*.( 4/0/,/(*$", $"22*&2
4)"4 0543 *4 *.4/ 0&230&$4*6& *. 4)& $/.4&84 /' " 3/,*% -/%&,
)& 4"#,& #&,/7 3)/73 4)*3 2&,"4*/.3)*0
"
!&24&8
%(&
"$&
"
/*.4
526&
52'"$&
)& 4/0/,/(*$", &.4*4*&3 '"$& ".% &%(& "2& $"22*&23
#&$"53& 4)&9 ./4 /.,9 4)&*2 (&/-&42*&3 #54 ",3/ /2 4)&- / 5.%&234".% 7)"4 4)*3 -&".3 7& -534 2&",;
*:& 4)"4 -/34 (&/-&42*&3 "2& /' *.'*.*4& &84&.4 ".% &6&. *'
4)&9 "2& '*.*4& /.,9 " 3-",, 3&(-&.4 -*()4 #& /' *.4&2&34
&35,4 /' +.*44*.( 4)& 47/ #/%*&3 4/(&4)&2 "4 4)& *.4&23&$4*/.
(2"0) )//3*.( " //,&". /0&2"4*/. *3 ./7 &15*6",&.4 4/ %&$*%*.(
7)*$) $/,/23 4/ +&&0 ".% 7)*$) 4/ %&,&4&
Getting Rid of the Wrong Colors. . 4)& 4)*2% ".% ,"34 34"(& /'
/52 *-"(*."29 02/$&33 ./4 -5$) *3 ,&'4 4/ %/ 0 4/ ./7 7&
)"6& ./4 3"*% 7)*$) +*.% /' //,&". /0&2"4*/. 5.*/. 35#;
42"$4*/. /2 *.4&23&$4*/. 7& 7".4&% /7 *3 4)& 4*-& 4/
%&$*%&
/ (&4 4)& %&3*2&% 2&35,4 7& 3*-0,9 0*$+ 4)& "002/02*"4&
$/,/2 ".% (&4 2*% /' ",, 6/,5-&3 /' " %*''&2&.4 $/,/2 4)". 4)&
/.& 7& 0*$+&% .*4*",,9 7& $)/3& 47/ $/,/23<#,5& ".% 9&,;
,/7<3/ 7& 7*,, '*.% 4)2&& $/,/23 *. /52 3/"0 #5##,& $,534&2
#,5& 9&,,/7 ".% (2&&. . 2&(*/.3 7)&2& #,5& ".% 9&,,/7
6/,5-&3 /6&2,"0 7& (&4 (2&&. )& 4"#,& #&,/7 3)/73
7)*$) $/,/23 7*,, #& +&04 /2 %&,&4&% '2/- 4)& #/%9 %&0&.%;
*.( /. 4)& 0"24*$5,"2 490& /' //,&". /0&2"4*/. 7& $)//3& •
! #,5& ".% 9&,,/7
9&,,/7
(2&&.
(2&&.
(2&&. ".% #,5&
#,5& ".% 9&,,/7
"39 *3.4 *4 "4 9/523&,' /. 4)& #"$+ ".% $,&". 50 4)&
-&33 /' 0"*.4 ".% $)*00&%;/'' 0*&$&3
. 4)& 02&$&%*.( &8"-0,& 7& /.,9 )"% 4/ -"2+ 4)& ,*.&3
7)&2& 4)& $/,/2 $)".(&3 4/ /#4"*. 4)& *.4&23&$4*/. (2"0)
)& //,&". &.(*.& ",(/2*4)- 4)"4 %/&3 4)*3 *3 " #*4 -/2&
$/-0,&8 / 5.%&234".% *4 7& -534 "("*. ,//+ "4 4)& -"4)&;
-"4*$", 2&02&3&.4"4*/. /' " 3/,*% . *( 7& )"6& 3&&. 4)&
(&.&2", %"4" 3425$452& ,"9/54 /' " $9,*.%&2 )"4 3+&4$) )/7;
&6&2 ,"$+3 ".9 &80,*$*4 2&'&2&.$&3 4/ (&/-&429 . /,*%&3*(.&23 ;&0 3425$452& 4)2&& #"3& $,"33&3 /' (&/-;
&42*&3 "2& 53&% 0/*.43 $526&3 ".% 352'"$&3 )& ,"34 47/
)"6& 3&6&2", 35#$,"33&3 /2 &8"-0,& " $526& $". #& "
$4/#&2 &7,&44;"$+"2% /52.",
*( &8&-0,*'*&3 4)& 2&,"4*/.3)*0 #&47&&. 4/0/,/(9 ".%
(&/-&429 //+*.( "4 4)& $9,*.%&2 3'
./4*$& 4)"4 /.,9 "
3&(-&.4 /' 4)& /4)&27*3& *.'*.*4& $9,*.%2*$", 352'"$& *3 53&%
)*3 3&(-&.4 *3 $",,&% " '"$& '"
*+&7*3& /.,9 47/ $*2$5;
,"2 2&(*/.3 /' 4)& /4)&27*3& *.'*.*4& 0,".&3 3' ".% 3'
"2&
53&% 4/ $,/3& 4)& $9,*.%&2 )& $*2$5,"2 2&(*/.3 "2& '"$& '"
".% '"$& '" /4& )& 4/0 ".% #/44/- '"$&3 /' 4)& $9,*.;
%&2 )"6& #&&. ,*'4&% /'' " #*4 '/2 #&44&2 %&-/.342"4*/. )&
%/5#,& 9&,,/7 &%(&3 $/*.$*%& *. 2&",*49
)& $/.$&04 /' 42*--&% 352'"$&3 *3 &33&.4*", '/2 4)& .&84
3&$4*/. #&$"53& *4 *.42/%5$&3 3/-& 5.&80&$4&% $/-0,*$";
4*/.3 7)&. $/.3425$4*.( 4)& *.4&23&$4*/. (2"0)
Constructing the Intersection Graph. "2,*&2 7& 3*-0,9 53&% ".
&8$&,,&.4 0"44&2. 2&$/(.*:&2 $",,&% 4)& )5-". #2"*. 4/ '*.%
4)& ,*.&3 7)&2& 4)& $/,/2 $)".(&3 &"$)*.( 4)*3 "#*,*49 4/ "
$/-054&2 *.6/,6&3 " $/.3*%&2"#,& "-/5.4 /' -"4)&-"4*$3
*( 3)/73 4)& $/.3425$4*/. /' /.& 3&(-&.4 /' ". *.4&23&$;
4*/. (2"0) " (2"0) &%(& )& %2"7*.( 3)/73 47/ *.4&23&$4;
*.( 352'"$&3 3' ".% 3' $"229*.( 47/ '"$&3 '" ".% '" /
$/.3425$4 4)& (2"0) &%(& 4)& 0*&$& /' 4)& *.4&23&$4*/. 42"$+
*.3*%& #/4) '"$&3 4)& '/,,/7*.( 34&03 "2& 2&15*2&%
)& 47/ 5.#/5.%&% 352'"$&3 3' ".% 3' "2& *.4&23&$4&%
(*6*.( 4)& *.4&23&$4*/. 42"$+ 42"$+
sf3
(Cylinder)
fa1
fa2
fa3
y
y
sf1 (Plane)
x
sf2 (Plane)
x
. &8"-0,& /' 4)& 2&,"4*/.3)*0 #&47&&. 4/0/,/(9 ".%
(&/-&429 "$&3 ".% &%(&3 #/5.% /2 42*- 4)&*2 (&/-&42*&3
7)*$) $/.3*34 /' *.'*.*4& $526&3 ".% 352'"$&3
sf1
Graph
Edge
fa2
i4
fa1
Track
i2
i3
sf2
i1
,+01/2!1',+ ,$ ,+# 0#%*#+1 ,$ + '+1#/0#!1',+ %/-&
%/-& #"%#
• &# #"%#0 ,$ $ /# '+1#/0#!1#" 4'1& 02/$!# 0$ 1, 6'#)" 1&#
#"%#02/$!# '+1#/0#!1',+ -,'+10 ' +" ' '*')/)6 1&#
#"%#0 ,$ $ /# '+1#/0#!1#" 4'1& 0$ %'3'+% 1&# '+1#/0#!1',+
-,'+10 '
+" '
• &# '+1#/0#!1',+ -,'+10 /# ,/"#/#" ),+% 1&# 1/!(
• &# ,/"#/#" -,'+10 /# #5*'+#" $,/ 1&#'/ &# --/,!& 3)2#0 0'*-)6 1#)) '$ $!# '0 #+1#/#" ,/ )#$1
4&#+ -00'+% -/1'!2)/ -,'+1 &'0 '+$,/*1',+ !+ #
20#" 1, "#"2!# 1&# !,+1'+*#+1 ,$ 0#%*#+1 ,$ 1&# '+1#/7
0#!1',+ %/-& 4'1& /#0-#!1 1, '10 %#+#/1'+% $!#0 &#
--/,!& +" !,+1'+*#+1 3)2#0 $,/ 1&# '+1#/0#!1',+ -,'+10
'+ 1&# -/#3',20 "/4'+% /#
'
'
'
'
,210'"#
,210'"#
#+1#/'+% $
'+0'"#
,210'"#
#+1#/'+% $
'+0'"#
'+0'"#
)#3'+% $
,210'"#
'+0'"#
)#3'+% $
,210'"#
,210'"#
&# +2* #/ ,$ /#.2'/#" '+1#/0#!1',+0 %/,40 /-'")6 .27
"/1'!))6 4'1& 1&# !,*-)#5'16 +2* #/ ,$ $!#0 ,$ 1&#
0,)'"0 ,/12+1#)6 1&# "'$$#/#+1 $!#$!# '+1#/0#!1',+0 !+
# #0')6 -#/$,/*#" '+ -/))#) &# )%,/'1&* '0 01/2!12/#"
02!& 1&1 '1 !+ !/#1# !0!"# ,$ 0,/1 ,$ 02 -/,7
!#00 ,/ #!& -'/ ,$ $!#0 02 -/,!#00 '0 )2+!&#" 1&1
0-)'10 '10#)$ 1, !)!2)1# 1&# 02/$!#02/$!# '+1#/0#!1',+0 +"
1&# #"%#02/$!# '+1#/0#!1',+0 '+ -/))#) '1& 1&# 3') ')7
'16 ,$ *2)1'-/,!#00,/ &/"4/# 1&# "3+1%#0 ,$ 1&'0 )%,7
/'1&*'! 01/2!12/# /# 0##+ 0 '+!/#0#" -#/$,/*+!# ,$ 1&#
,,)#+ ,-#/1',+0
Imprinting and Coloring. + 1&# '+12'1'3# --/,!& !,),/'+% 1&#
$!#0 1&1 '0 "#1#/*'+'+% 4&'!& -'#!#0 /# '+0'"# ,/ ,210'"#
40 +, -/, )#* #!20# '1 !,2)" #0')6 # 0##+ + 1&#
*!&'+# )#3#) ,1&#/ *#+0 /# /#.2'/#"
+1#/0#!1',+ 1/!(0 0-)'1 02/$!#0 +" $!#0 '+1, )#$1 +" /'%&1
&)3#0 ""'1',+))6 02/$!#0 0-)'1 0-!# '+1, &)3#0 !))#"
# !+ !)00'$6 #!& -'#!# ,$ 1&# 0-)'1 $!# 1, &)$ 0-!# 4'1& /#0-#!1 1, 1&# ,1&#/ 02/$!# &'0 -/,!#"2/#
'0 "#*,+01/1#" '+ '%
)00'$'!1',+ '0 ",+# 4'1& /#0-#!1 1, 1&# 02/$!# +,/*)0
!,),/#" //,40 ,$ ,1& 02/$!#0 0$ +" 0$ +" 1&# '+1#/7
0#!1',+ 1/!(
1 '0 #06 1, 0## 1&1 1&# ,,)#+ #+%'+# '0 "/'3'+% *,01 *7
!&'+'+% ,-#/1',+0 #/# /# 0,*# --)'!1',+0 '+ 4&'!& '1 '0
+,1 0, , 3',20
Partial Booleans. #%2)/ ,,)#+ ,-#/1',+0 11#*-1 1, !)!27
)1# )) '+1#/0#!1',+ 1/!(0 #14##+ ,"'#0 + !,+1/01 -/1')
,,)#+ ,-#/1',+0 !)!2)1# ,+)6 ,+# '+1#/0#!1',+ 1/!(
&'!& ,+# "#-#+"0 ,+ 1&# -/1'!2)/ --)'!1',+ +# #57
*-)# ,$ -/1') ,,)#+ ,-#/1',+ '+ ,)'"#0'%+#/
'0 4/--#" '+1, 1&# #51/2"#71,7-/1 !,**+" 1 $'/#0 -/,7
$')# "#$'+#" '+ 4,/(-)+# ,+1, ,"6 0 0&,4+ '+ '%
&# -'!12/# 0&,40 ,"6 +" -/,$')# 0#1 2- $,/ 1&#
Intersection
Track
• &# 0#%*#+10 ,$ 1&# '+1#/0#!1',+ %/-& '+0'"# ,1& $!#0 /#
20#" 1, !/#1# 1&# %/-& #"%#0 ,$ -/1'!2)/ '+1#/0#!1',+
+ 1&'0 #5*-)# ,+)6 1&# 0#%*#+1 ,2+"#" 6 ' +" '
$2)$'))0 1&'0 !,+"'1',+
Parallelism. &# !,*-)#1# '+1#/0#!1',+ %/-& ,$ 14, ,"'#0 '0
, 1'+#" 6 -'/4'0# '+1#/0#!1',+ ,$ $!#0 0#)#!1#" $/,* ,1&
0,)'"0 &# +2* #/ ,$ /#.2'/#" $!#$!# '+1#/0#!1',+0 "#7
-#+"0 ,+ 1&# +2* #/ ,$ $!#0 '+ ,1& 0,)'"0
' +*
4&#/# ' '0 1&# +2* #/ ,$ '+1#/0#!1',+0 + '0 1&# +2* #/ ,$
$!#0 '+ ,+# ,"6 +" * '0 1&# +2* #/ ,$ $!#0 '+ 1&# ,1&#/
,"6
Outside
sf2
sf1
sf2
Inside
sf1
Outside
sf1
Inside
sf2
2/$!#0 0-)'1 0-!# '+1, &)3#0 !))#" &)$ 0-!#0 '+0'"#
+" ,210'"# ),+% 02/$!# +,/*)0 !& -'#!# ,$ 0-)'1 02/$!#
!+ # !)00'$'#" 0 #),+%'+% 1, &)$ 0-!# 4'1& /#0-#!1 1, 1&#
,1&#/ 02/$!#
!1, #/ #4)#117!(/" ,2/+)
The robustness of Boolean operations between solids is crucial for the usability of
a solid modeler like HP PE/SolidDesigner. Unfortunately, geometric modeling is
like shoveling sand. With every shovel you pick up a bit of dirt. The numerically
imperfect nature of geometric algorithms can challenge HP PE/SolidDesigner’s
Boolean engine with contradictions and inconsistencies. The Boolean engine uses
a perturbation method1,2 to push the frontier of robustness. This article explains
the notion of model consistency and demonstrates what can go wrong inside a
Boolean operation and what can be done to come up with a correct result anyway.
Consistency of a Solid
Looking at a solid we usually believe that it is mathematically correct, that is, that
the edges are exactly on their adjacent faces and the edges meet exactly at their
common vertices. In reality, however, the limited floating-point accuracy of a computer introduces errors. On the microscopic level there are gaps and holes everywhere (see Fig. 1).
The tolerable amount of error is specified by the modeling resolution. The system
will ignore gaps and holes smaller than the resolution. However, some geometric
algorithms, such as the various intersection calculations, tend to magnify errors in
certain geometric configurations. This means that given an input where all errors
are within limits, the result can be inconsistent in the context of the solid and prohibit the successful completion of the requested Boolean operation.
Solving the Numerical Puzzle
One area in the Boolean operation that is particularly vulnerable to numerical
inconsistencies is the intersection graph construction. The graph construction
assumes that all intersections of curves defined on one of two intersecting surfaces are also on the intersection track (here the term on means closer than the
resolution). This is no problem if the surfaces are reasonably orthogonal. However,
for intersections between tangential or almost tangential surfaces, a small error in
the orthogonal direction of a surface implies a larger error in the direction of the
surface, and this assumption becomes false.
Fig. 2 shows a shallow intersection between the two surfaces sf1 and sf2 and the
intersection with sf2 of a curve (cv) contained in sf1. The curve/surface intersection point (small colored triangle) has, because of the small distance (epsilon)
between cv and its containing surface sf1, moved farther away from the surface/surface intersection track (colored line) than the resolution permits. The smaller the angle
the larger the distance d from the intersection track and hence the larger the
inconsistency.
cv ∩ sf2
epsilon
cvŮsf1
sf1 ∩ sf2
d
d=
sf1
epsilon
sin sf2
Fig. 1. In solid models edges seem to be exactly on their adjacent faces and meet exactly
at their common vertices. In reality, because of the limited floating-point accuracy of a
computer, on the microscopic level there are gaps and holes everywhere.
Fig. 2. A shallow intersection between the two surfaces sf1 and sf2 and the
intersection with sf2 of a curve (cv) contained in sf1.
'#!$)#) !# !# ( # #!"# ! &!
# '#!$ ! #" # ( " $" # $ # !"$#
# !# " # !"$# # !#
"$( # '#!$ ! &$ '# # ( # #
## !$ " #!"# ! Reflection of Solids. #! $$"$ # "
# !# "" # "&" ( &#
! !# "# $ # # !# " # !"$# # !# !#
( ! "# $ ! '#!$)#) !#
!# # !# " # !"$# # !#
#! &##)! $!
" !# "$# &# !$! !)
#" ( ( !!! $# # # ( &)
%! #" &$ $! # &# $#
## #!"#" "# # !# #!)
"#" # # ( &# # !# # # #!"# ! & $" # $ # # (
Fortunately, there is a method called perturbation than can come to the rescue in
situations like this. It solves the inconsistency by moving the curve/surface intersection point along the curve until it is closer than the resolution to the surface/surface intersection track. In Fig. 2 the point will be moved to the left. When the intersection point is moved, a new error is introduced because the point is moved away
from sf2. However, the overall error is reduced so that it no longer exceeds the
resolution.
The perturbation method can be applied to similar situations in which even the
number of intersections has to be corrected. The difference in number is a result
the freedom algorithms have below the resolution. They may return anything in the
range of the resolution.
Two Curve/Surface Intersection Points with One Surface/Surface Intersection Track. Fig. 3 shows a geometric configuration in which the
intersection between sf1 and sf2 yields one intersection track (colored line) but the
intersection of the curve contained in sf1 with sf2 gives two intersection points
(colored triangles) which are farther than the resolution away from the track. The
perturbation algorithm moves both points inwards (horizontal arrows) and contracts them into a single point (black triangle) which is closer than the resolution to
the intersection track (colored line).
Two Surface/Surface Intersection Tracks with One Curve/Surface Intersection Point. Fig. 4 shows a geometric configuration in which the
intersection between sf1 and sf2 yields two intersection tracks (colored lines) but
the intersection of the curve contained in sf1 with sf2 gives one intersection point
(colored triangle) which is farther than the resolution away from the tracks. The
perturbation algorithm splits the single intersection into two and moves them outwards (horizontal arrows) until both are closer than the resolution to an intersection track (colored line).
References
1. H. Edelsbrunner and E. Mucke, “Simulation of simplicity: A technique to cope with degenerate cases in geometric algorithms,” Proceedings of the 4th ACM Symposium on Computational
Geometry, June 1988, pp. 118-133.
2. C. K. Yap, “A geometric consistency theorem for a symbolic perturbation theorem,” ibid,
pp. 134-142.
sf2
sf2
cv ∩ sf2
cv ∩ sf2
cv ∩ sf2
epsilon
epsilon
sf1 ∩ sf2
sf1
sf1 ∩ sf2
sf1
Fig. 3. A geometric configuration in which the intersection between sf1 and sf2 yields
one intersection track (colored line) but the intersection of the curve contained in sf1 with
sf2 gives two intersection points (colored triangles) which are farther than the resolution away from the track.
Fig. 4. A geometric configuration in which the intersection between sf1 and sf2 yields
two intersection tracks (colored lines) but the intersection of the curve contained in sf1 with
sf2 gives one intersection point (colored triangle) which is farther than the resolution
away from the tracks.
! &% $$"$ "#* &"&$ !&$%&"! )& &
$$"$ #! % !* "$&""! ! $&(* %* &" #$+
"$ " #$ &" & &!!& !&$%&"!%
("# !& " & ""! "$& % !("( !*
#"# # &!% &" "$ $ $! ("# !& &
$% $ !! $ ! ! &( ' ! #$"&
!$ $!%& %)!
!&* " #'&$ !
$%%
"* )& $! $&"! #! %& '# ! & $&
& $%'& " & $& "#$&"!
&"$ )&&+$ "'$!
Download