package Ġopen q . vas p Ċ Ċ import Ġopen q . model .* Ċ import Ġorg . j blas . Double Matrix Ċ import Ġorg . slf 4 j . LoggerFactory Ċ import Ġjava . lang . Exception Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ import Ġkotlin . collections . HashMap Ċ import Ġkotlin . math . log Ċ Ċ /** Ċ Ġ* Ġ éĶ® éķ¿ åĪĨæŀĲ æ¨¡åĿĹ Ċ Ġ*/ Ċ class ĠB ond Length Ġ{ ĊĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠLoggerFactory . getLogger ( Bond Length :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ@ Jvm Static Ġfun Ġcomponent Combination Select ( num : ĠInt , Ġcomponent List : ĠList < String >): ĠArrayList < ArrayList < String >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠArrayList < ArrayList < String >> Ġ Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( c Ġin Ġcomponent List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlist : ĠArrayList < String > Ġ= ĠArrayList () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist . add ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( list ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( num Ġ>= Ġcomponent List . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġcomponent List . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsize Ġ- Ġnum Ġ+ Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä»İ i + 1 å¤Ħ çĽ´ èĩ³ åŃĹç¬¦ä¸² æľ« å°¾ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcr : ĠList < ArrayList < String >> Ġ= Ġcomponent Combination Select ( num Ġ- Ġ 1 , Ġcomponent List . sub List ( i Ġ+ Ġ 1 , Ġsize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcomponent List [ i ] Ġ// å¾ĹåĪ° ä¸ĬéĿ¢ è¢« åİ» æİī çļĦ åŃĹç¬¦ ï¼Į è¿Ľè¡Į ç»ĦåĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( s Ġin Ġcr ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġs . add ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( s ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġæī§è¡Į éĶ® éķ¿ åıĺåĮĸ åĪĨæŀĲ ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġperform ( analy se Key Frame List : ĠList < Analy se Key Frame >, Ġresource Cache : ĠMap < String , ĠResource >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel Setting : ĠChannel Setting ): Bond Length Result Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ æľĢç»Ī è®¡ç®Ĺ çļĦ ç»ĵæŀľ ï¼Į å¸ § çļĦ æŁ¥æī¾ éĶ® ä¸º å¸ § åľ¨ æķ°ç»Ħ ä¸ŃçļĦ ç´¢å¼ķ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbond Distance Result Ġ= Ġjava . util . ArrayList < Mutable Map < String , ĠDouble >>() ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħĪ è®¾ç½®ä¸º é»ĺè®¤ åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdistance Max : ĠDouble Ġ= Ġjava . lang . Double . parseDouble ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠExt Channel Settings . getDefault Value ( Ext Channel Settings . B OND _ LENGTH _ MAX ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( channel Setting . ext Setting . containsKey ( Ext Channel Settings . B OND _ LENGTH _ MAX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Max Ġ= Ġchannel Setting . ext Setting [ Ext Channel Settings . B OND _ LENGTH _ MAX ] !!. toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ignored : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . error ("${ ignored . message }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġanaly se Key Frame List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠåĪĿå§ĭåĮĸ ç»ĵæŀľ éĽĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbond Distance Result . add ( java . util . HashMap ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġanaly se Key Frame List [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresource Ġ= Ġresource Cache [ frame . resourceName ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è½¬æį¢ ä¸º éĢļ çĶ¨ åĿĲæłĩ å½¢å¼ı ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommon Coordinate Ġ= ĠResource . convert Coordinate To Common Type ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent List : ĠSet < String > Ġ= Ġcommon Coordinate . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ it . symbol }${ it . sequence Number }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toSet () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log . isDebugEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug (" ç»Ħ åĪĨ éĽĨåĲĪ ï¼ļ {}", Ġcomponent List . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæŁ¥ æī¾ è¡¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent And Coordinate Ġ= ĠHashMap < String , ĠDouble Array >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Coordinate . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent And Coordinate [" ${ it . symbol }${ it . sequence Number } "] Ġ= Ġdouble ArrayOf ( it . x , Ġit . y , Ġit . z ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( log . isDebugEnabled ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug ( frame . name ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent And Coordinate . forEach Ġ{ Ġ( k , Ġv ) Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog . debug ("{} Ġ=> Ġ{}", Ġk , Ġv . content ToString ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġå¯¹ è®¡ç®Ĺ ä½ĵ ç³» ä¸ŃçļĦ åİŁ åŃĲ è¿Ľè¡Į ç»ĦåĲĪ ï¼Į å¾ĹåĪ° åĢĻ éĢī åĮĸ åŃ¦ éĶ® éĽĨåĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcombination Result : ĠList < List < String >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent Combination Select ( 2 , Ġjava . util . ArrayList ( component List )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ è®¡ç®Ĺ åĩº åĢĻ éĢī åĮĸ åŃ¦ éĶ® çļĦ éĶ® éķ¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( combin ation Ġin Ġcombination Result ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent 1 Ġ= Ġcombination [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent 2 Ġ= Ġcombination [ 1 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent 1 Coordinate Ġ= Ġcomponent And Coordinate [ component 1 ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcomponent 2 Coordinate Ġ= Ġcomponent And Coordinate [ component 2 ] !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdistance Ġ= Ġ 0 . 0 Ġ// Ġ éĶ® éķ¿ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĿĲæłĩ è½¬æį¢ å¹¶ è®¡ç®Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġco or 1 Ġ= ĠDouble Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , Ġ 1 , Ġcomponent 1 Coordinate [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent 1 Coordinate [ 1 ], Ġcomponent 1 Coordinate [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġco or 2 Ġ= ĠDouble Matrix ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 , Ġ 1 , Ġcomponent 2 Coordinate [ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomponent 2 Coordinate [ 1 ], Ġcomponent 2 Coordinate [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdistance Ġ= Ġco or 1 . sub ( co or 2 ). norm 2 () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġæ£Ģ æŁ¥ è¯¥ éĶ® éķ¿ æĺ¯åĲ¦ å·²ç»ı è¶ħ åĩº äºĨ åĮĸ åŃ¦ æĪĲ éĶ® è·Ŀç¦» çļĦ éĺ Ī åĢ¼ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( distance Ġ<= Ġdistance Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĶ¾ åħ¥ ç»ĵæŀľ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbond Distance Result [ i ][" $ component 1 -$ component 2 "] Ġ= Ġdistance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠB ond Length Result ( analy se Key Frame List , Ġbond Distance Result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }