package Ġun ic ot . app . fract al visual izer . graph Ċ Ċ import Ġandroid . graphics . Point Ċ import Ġandroid . graphics . PointF Ċ Ċ import Ġun ic ot . app . fract al visual izer . core . DG Common Ċ import Ġkotlin . math . pow Ċ import Ġkotlin . math . sqrt Ċ import Ġkotlin . math . tan Ċ Ċ /** Ċ Ġ* ĠãĤ · ãĤ§ ãĥ« ãĥĶ ãĥ³ãĤ¹ ãĤŃ ãĥ¼ãģ® ä¸ī è§Ĵ å½¢ Ċ Ġ*/ Ċ class ĠSG asket Ġ: ĠGraph () Ġ{ ĊĠĠĠ Ġvar Ġskew Angle : ĠFloat Ġ= Ġ 0 . 0 f ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcomplexity Min Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcomplexity Max Ġ= Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġskew Angle Ġ= Ġ 0 . 0 f ĊĊĠĠĠĠĠĠĠ Ġinfo . graph Kind Ġ= ĠDG Common . Graph Kind . SI ER PIN SK I _ G ASK ET ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġval Ġpoint Max : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn Orders Ġ= Ġ( 3 . 0 . pow ( info . complexity . toDouble ()) Ġ+ Ġ 0 . 5 ). toInt () ĠĠĠ Ġ// Ġint ãģ§ ãģ® åĽĽ æį ¨ äºĶ åħ¥ ãģ« æ³¨æĦı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġn Orders ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġallocate Points () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æĸ° æ³ķ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( point . size Ġ> Ġpoint Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint . remove At ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġwhile Ġ( point . size Ġ< Ġpoint Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint . add ( PointF ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġpoint Base . clear () ĊĊĠĠĠĠĠĠĠ Ġorder Points Ġ= ĠArray ( n Orders ){ ĠPoint () Ġ} ĊĠĠĠĠĠĠĠ Ġcalculate Order () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġset Relative Point () Ġ{ ĊĠĠĠĠĠĠĠ Ġallocate Points () ĊĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġfloat ArrayOf ( sqrt ( 3 . 0 ). toFloat () Ġ/ Ġ 2 Ġ* ĠGraph Info . GRAPH _ POS _ MIN , Ġsqrt ( 3 . 0 ). toFloat () Ġ/ Ġ 2 Ġ* ĠGraph Info . GRAPH _ POS _ MAX , ĠGraph Info . GRAPH _ POS _ MID ) Ġ// Ġ ä¸ī è§Ĵ å½¢ ãģ® x åº§ æ¨Ļ ( å·¦ ãĥ» åı³ ãĥ» ä¸Ń ) ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġfloat ArrayOf ( 0 . 5 f Ġ* ĠGraph Info . GRAPH _ POS _ MAX , Ġ 0 . 5 f Ġ* ĠGraph Info . GRAPH _ POS _ MAX , Ġsqrt ( 3 . 0 ). toFloat () Ġ/ Ġ 2 Ġ* ĠGraph Info . GRAPH _ POS _ MIN ) Ġ// Ġ ä¸ī è§Ĵ å½¢ ãģ® y åº§ æ¨Ļ ( ä¸ĭ ãĥ» ä¸ĭ ãĥ» ä¸Ĭ ) ĊĊĠĠĠĠĠĠĠ Ġdivide Points ( 1 , Ġx , Ġy ) Ġ// Ġ ä¸ī è§Ĵ å½¢ æıı çĶ» ãģ® åĳ¼ ãģ³ åĩº ãģĹ ĊĊĠĠĠĠĠĠĠ Ġis Allocated Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdivide Points ( base : ĠInt , Ġx : ĠFloat Array , Ġy : ĠFloat Array ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġvar Ġchild X : ĠFloat Array ĊĠĠĠĠĠĠĠ Ġvar Ġchild Y : ĠFloat Array ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åĲĦ è¾ º ãģ® ä¸Ń çĤ¹ ãĤĴ çµĲ ãĤĵ ãģł ä¸ī è§Ĵ å½¢ ãģ® æıı çĶ» ĊĠĠĠĠĠĠĠ Ġval Ġmid X : ĠFloat Array Ġ= Ġfloat ArrayOf (( x [ 0 ] Ġ+ Ġx [ 1 ]) Ġ/ Ġ 2 , Ġ( x [ 1 ] Ġ+ Ġx [ 2 ]) Ġ/ Ġ 2 , Ġ( x [ 2 ] Ġ+ Ġx [ 0 ]) Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġmid Y : ĠFloat Array Ġ= Ġfloat ArrayOf (( y [ 0 ] Ġ+ Ġy [ 1 ]) Ġ/ Ġ 2 , Ġ( y [ 1 ] Ġ+ Ġy [ 2 ]) Ġ/ Ġ 2 , Ġ( y [ 2 ] Ġ+ Ġy [ 0 ]) Ġ/ Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġä¸Ģ çķª ä¸ĭ ãģ® éļ İ å± ¤ ãģ« ãģ¦ ãĢģ åħ¨ ãģ¦ ãģ® çĤ¹ ãĤĴ çĻ»éĮ² ãģĻãĤĭ ĊĠĠĠĠĠĠĠ Ġif Ġ( base Ġ== Ġinfo . complexity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Base . add ( PointF ( x [ 0 ], Ġy [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Base . add ( PointF ( x [ 1 ], Ġy [ 1 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint Base . add ( PointF ( x [ 2 ], Ġy [ 2 ])) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠæĽ´ ãģ« åĪĨ åī² ĊĠĠĠĠĠĠĠ Ġchild X Ġ= Ġfloat ArrayOf ( x [ 0 ], Ġmid X [ 0 ], Ġmid X [ 2 ]) ĊĠĠĠĠĠĠĠ Ġchild Y Ġ= Ġfloat ArrayOf ( y [ 0 ], Ġmid Y [ 0 ], Ġmid Y [ 2 ]) ĊĠĠĠĠĠĠĠ Ġdivide Points ( base Ġ+ Ġ 1 , Ġchild X , Ġchild Y ) Ġ// Ġ å·¦ ä¸ĭ ĊĊĠĠĠĠĠĠĠ Ġchild X Ġ= Ġfloat ArrayOf ( mid X [ 0 ], Ġx [ 1 ], Ġmid X [ 1 ]) ĊĠĠĠĠĠĠĠ Ġchild Y Ġ= Ġfloat ArrayOf ( mid Y [ 0 ], Ġy [ 1 ], Ġmid Y [ 1 ]) ĊĠĠĠĠĠĠĠ Ġdivide Points ( base Ġ+ Ġ 1 , Ġchild X , Ġchild Y ) Ġ// Ġ åı³ ä¸ĭ ĊĊĠĠĠĠĠĠĠ Ġchild X Ġ= Ġfloat ArrayOf ( mid X [ 2 ], Ġmid X [ 1 ], Ġx [ 2 ]) ĊĠĠĠĠĠĠĠ Ġchild Y Ġ= Ġfloat ArrayOf ( mid Y [ 2 ], Ġmid Y [ 1 ], Ġy [ 2 ]) ĊĠĠĠĠĠĠĠ Ġdivide Points ( base Ġ+ Ġ 1 , Ġchild X , Ġchild Y ) Ġ// Ġä¸Ĭ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcalculate Order () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġpoint Max ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdst Ġ= Ġif Ġ( i Ġ% Ġ 3 Ġ== Ġ 2 ) Ġi Ġ- Ġ 2 Ġelse Ġi Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Points [ i ] Ġ= ĠPoint ( i , Ġdst ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrunning Graph () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Allocated ) Ġset Relative Point () ĊĊĠĠĠĠĠĠĠ Ġcopy Base Point () ĊĊĠĠĠĠĠĠĠ Ġvar Ġtmp X : ĠFloat ĊĠĠĠĠĠĠĠ Ġvar Ġtmp Y : ĠFloat ĊĠĠĠĠĠĠĠ Ġfor Ġ( n Ġin Ġpoint . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp X Ġ= Ġ( point [ n ]. x Ġ+ Ġpoint [ n ]. y Ġ* Ġtan ( Math . to Radians ( skew Angle . toDouble ())) ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtmp Y Ġ= Ġpoint [ n ]. y ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint [ n ]. x Ġ= Ġtmp X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoint [ n ]. y Ġ= Ġtmp Y ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrotate Relative Point () ĊĠĠĠĠĠĠĠ Ġtranslate Relative Point () ĊĠĠĠ Ġ} Ċ } Ċ