@ file : Suppress (" UNUSED _ PARAMETER ") Ċ Ċ package Ġlesson 8 . task 1 Ċ Ċ import Ġlesson 1 . task 1 . sqr Ċ import Ġkotlin . math .* Ċ Ċ // ĠÐ£ ÑĢ Ð¾Ðº Ġ 8 : ĠÐ¿ÑĢ Ð¾ÑģÑĤ ÑĭÐµ ĠÐºÐ»Ð°ÑģÑģ Ñĭ Ċ // ĠÐľ Ð°Ðº Ñģ Ð¸Ð¼ Ð°Ð»ÑĮ Ð½Ð¾Ðµ ĠÐºÐ¾Ð» Ð¸Ñĩ ÐµÑģÑĤÐ²Ð¾ ĠÐ± Ð°Ð» Ð» Ð¾Ð² Ġ= Ġ 4 0 Ġ( Ð± ÐµÐ· ĠÐ¾ Ñĩ ÐµÐ½ÑĮ ĠÑĤ ÑĢÑĥ Ð´ Ð½ÑĭÑħ ĠÐ·Ð°Ð´ Ð°Ñĩ Ġ= Ġ 1 1 ) Ċ Ċ /** Ċ Ġ* ĠÐ¢ Ð¾Ñĩ ÐºÐ° ĠÐ½Ð° ĠÐ¿Ð» Ð¾Ñģ Ðº Ð¾ÑģÑĤ Ð¸ Ċ Ġ*/ Ċ data Ġclass ĠPoint ( val Ġx : ĠDouble , Ġval Ġy : ĠDouble ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐŁ ÑĢ Ð¸Ð¼ÐµÑĢ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐł Ð°ÑģÑģ Ñĩ Ð¸ÑĤ Ð°ÑĤÑĮ Ġ( Ð¿ Ð¾ ĠÐ¸Ð· Ð² ÐµÑģÑĤ Ð½Ð¾Ð¹ ĠÑĦ Ð¾ÑĢÐ¼ Ñĥ Ð» Ðµ ) ĠÑĢÐ°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ´Ð² ÑĥÐ¼ Ñı ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼Ð¸ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdistance ( other : ĠPoint ): ĠDouble Ġ= Ġsqrt ( sqr ( x Ġ- Ġother . x ) Ġ+ Ġsq r ( y Ġ- Ġother . y )) Ċ } Ċ Ċ /** Ċ Ġ* ĠÐ¢ ÑĢ Ðµ Ñĥ Ð³ Ð¾Ð»ÑĮ Ð½Ð¸Ðº , ĠÐ·Ð°Ð´ Ð°Ð½ Ð½ÑĭÐ¹ ĠÑĤ ÑĢÐµÐ¼ Ñı ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼Ð¸ Ġ( a , Ġb , Ġc , ĠÑģÐ¼ . Ġconstructor ĠÐ½ Ð¸ Ð¶Ðµ ). Ċ Ġ* ĠÐŃ ÑĤÐ¸ ĠÑĤ ÑĢÐ¸ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ ĠÑħ ÑĢÐ°Ð½ ÑıÑĤ ÑģÑı ĠÐ² ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ² Ðµ Ġpoints , ĠÐ¸ Ñħ ĠÐ¿ Ð¾ÑĢ Ñı Ð´ Ð¾Ðº ĠÐ½Ðµ ĠÐ¸Ð¼ Ðµ ÐµÑĤ ĠÐ·Ð½Ð°Ñĩ ÐµÐ½Ð¸Ñı . Ċ Ġ*/ Ċ @ Suppress (" Member Visibility Can Be Private ") Ċ class ĠTriangle Ġprivate Ġconstructor ( private Ġval Ġpoints : ĠSet < Point >) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġpoint List Ġ= Ġpoints . toList () ĊĊĠĠĠ Ġval Ġa : ĠPoint Ġget () Ġ= Ġpoint List [ 0 ] ĊĊĠĠĠ Ġval Ġb : ĠPoint Ġget () Ġ= Ġpoint List [ 1 ] ĊĊĠĠĠ Ġval Ġc : ĠPoint Ġget () Ġ= Ġpoint List [ 2 ] ĊĊĠĠĠ Ġconstructor ( a : ĠPoint , Ġb : ĠPoint , Ġc : ĠPoint ) Ġ: Ġthis ( linked Set Of ( a , Ġb , Ġc )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐŁ ÑĢ Ð¸Ð¼ÐµÑĢ : ĠÐ¿Ð¾Ð» ÑĥÐ¿ ÐµÑĢ Ð¸Ð¼ ÐµÑĤ ÑĢ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġhalf Per imeter () Ġ= Ġ( a . distance ( b ) Ġ+ Ġb . distance ( c ) Ġ+ Ġc . distance ( a )) Ġ/ Ġ 2 . 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐŁ ÑĢ Ð¸Ð¼ÐµÑĢ : ĠÐ¿ Ð»Ð¾ Ñī Ð°Ð´ ÑĮ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġarea (): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġhalf Per imeter () ĊĠĠĠĠĠĠĠ Ġreturn Ġsqrt ( p Ġ* Ġ( p Ġ- Ġa . distance ( b )) Ġ* Ġ( p Ġ- Ġb . distance ( c )) Ġ* Ġ( p Ġ- Ġc . distance ( a ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐŁ ÑĢ Ð¸Ð¼ÐµÑĢ : ĠÑĤÑĢ Ðµ Ñĥ Ð³ Ð¾Ð»ÑĮ Ð½Ð¸Ðº ĠÑģ Ð¾Ð´ÐµÑĢÐ¶ Ð¸ÑĤ ĠÑĤ Ð¾Ñĩ ÐºÑĥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcontains ( p : ĠPoint ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġab p Ġ= ĠTriangle ( a , Ġb , Ġp ) ĊĠĠĠĠĠĠĠ Ġval Ġb cp Ġ= ĠTriangle ( b , Ġc , Ġp ) ĊĠĠĠĠĠĠĠ Ġval Ġcap Ġ= ĠTriangle ( c , Ġa , Ġp ) ĊĠĠĠĠĠĠĠ Ġreturn Ġab p . area () Ġ+ Ġb cp . area () Ġ+ Ġcap . area () Ġ<= Ġarea () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġother Ġis ĠTriangle Ġ&& Ġpoints Ġ== Ġother . points ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= Ġpoints . hashCode () ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Triangle ( a Ġ= Ġ$ a , Ġb Ġ= Ġ$ b , Ġc Ġ= Ġ$ c )" Ċ } Ċ Ċ /** Ċ Ġ* ĠÐŀ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĠÑģ ĠÐ·Ð°Ð´ Ð°Ð½ Ð½ÑĭÐ¼ ĠÑĨ ÐµÐ½ÑĤ ÑĢ Ð¾Ð¼ ĠÐ¸ ĠÑĢÐ°Ð ´ Ð¸ ÑĥÑģ Ð¾Ð¼ Ċ Ġ*/ Ċ data Ġclass ĠCircle ( val Ġcenter : ĠPoint , Ġval Ġradius : ĠDouble ) Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐŁ ÑĢ Ð¾ÑģÑĤ Ð°Ñı Ġ( 2 ĠÐ± Ð°Ð» Ð»Ð° ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐł Ð°ÑģÑģ Ñĩ Ð¸ÑĤ Ð°ÑĤÑĮ ĠÑĢÐ°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ´Ð² ÑĥÐ¼ Ñı ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤ Ñı Ð¼Ð¸ . ĊĠĠĠĠ Ġ* ĠÐł Ð°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ½ ÐµÐ¿ ÐµÑĢ ÐµÑģ ÐµÐº Ð°Ñİ Ñī Ð¸Ð¼ Ð¸ ÑģÑı ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤ Ñı Ð¼Ð¸ ĠÑĢ Ð°ÑģÑģ Ñĩ Ð¸ÑĤ ÑĭÐ² Ð°ÐµÑĤÑģÑı ĠÐºÐ°Ðº ĊĠĠĠĠ Ġ* ĠÑĢÐ°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ¸ Ñħ ĠÑĨ ÐµÐ½ÑĤ ÑĢÐ°Ð¼ Ð¸ ĠÐ¼ Ð¸Ð½ ÑĥÑģ ĠÑģ ÑĥÐ¼ Ð¼ Ð° ĠÐ¸ Ñħ ĠÑĢÐ°Ð ´ Ð¸ ÑĥÑģ Ð¾Ð² . ĊĠĠĠĠ Ġ* ĠÐł Ð°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ¿ÐµÑĢ ÐµÑģ ÐµÐº Ð°Ñİ Ñī Ð¸Ð¼ Ð¸ ÑģÑı ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤ Ñı Ð¼Ð¸ ĠÑģ Ñĩ Ð¸ÑĤ Ð°ÑĤÑĮ ĠÑĢÐ°Ð ² Ð½ÑĭÐ¼ Ġ 0 . 0 . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdistance ( other : ĠCircle ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġcenter . distance ( other . center ) Ġ- Ġ( radius Ġ+ Ġother . radius ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( d Ġ> Ġ 0 ) Ġd Ġelse Ġ 0 . 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ¢ ÑĢ Ð¸Ð² Ð¸ Ð°Ð»ÑĮ Ð½Ð°Ñı Ġ( 1 ĠÐ± Ð°Ð» Ð» ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐĴ ÐµÑĢ Ð½ Ñĥ ÑĤÑĮ Ġtrue , ĠÐµÑģÐ»Ð¸ ĠÐ¸ ĠÑĤÐ¾Ð»ÑĮÐºÐ¾ ĠÐµÑģÐ»Ð¸ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĠÑģ Ð¾Ð´ÐµÑĢÐ¶ Ð¸ÑĤ ĠÐ´Ð°Ð½ Ð½ÑĥÑİ ĠÑĤ Ð¾Ñĩ ÐºÑĥ ĠÐĿ ÐĲ ĠÑģ ÐµÐ± Ðµ ĠÐ¸Ð»Ð¸ ĠÐĴ ÐĿ Ð£ Ð¢ Ðł Ðĺ ĠÑģ ÐµÐ± Ñı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcontains ( p : ĠPoint ): ĠBoolean Ġ= Ġcenter . distance ( p ) Ġ<= Ġradius Ċ } Ċ Ċ /** Ċ Ġ* ĠÐŀ ÑĤÑĢ ÐµÐ· Ð¾Ðº ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ´Ð² ÑĥÐ¼ Ñı ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼Ð¸ Ċ Ġ*/ Ċ data Ġclass ĠSegment ( val Ġbegin : ĠPoint , Ġval Ġend : ĠPoint ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= ĊĠĠĠĠĠĠĠ Ġother Ġis ĠSegment Ġ&& Ġ( begin Ġ== Ġother . begin Ġ&& Ġend Ġ== Ġother . end Ġ|| Ġend Ġ== Ġother . begin Ġ&& Ġbegin Ġ== Ġother . end ) ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode () Ġ= ĊĠĠĠĠĠĠĠ Ġbegin . hashCode () Ġ+ Ġend . hashCode () Ċ } Ċ Ċ /** Ċ Ġ* ĠÐ¡ ÑĢÐµÐ´ Ð½Ñı Ñı Ġ( 3 ĠÐ± Ð°Ð» Ð»Ð° ) Ċ Ġ* Ċ Ġ* ĠÐĶ Ð°Ð½ Ð¾ ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ²Ð¾ ĠÑĤ Ð¾Ñĩ ÐµÐº . ĠÐĴ ÐµÑĢ Ð½ Ñĥ ÑĤÑĮ ĠÐ¾ÑĤ ÑĢ ÐµÐ· Ð¾Ðº , ĠÑģÐ¾ ÐµÐ´ Ð¸Ð½ Ñı Ñİ ÑīÐ¸Ð¹ ĠÐ´Ð² Ðµ ĠÐ½Ð° Ð¸Ð± Ð¾Ð» ÐµÐµ ĠÑĥ Ð´Ð°Ð» Ñĳ Ð½ Ð½ÑĭÐµ ĠÐ¸Ð· ĠÐ½ Ð¸Ñħ . Ċ Ġ* ĠÐķÑģÐ»Ð¸ ĠÐ² ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ² Ðµ ĠÐ¼ÐµÐ½ ÐµÐµ ĠÐ´Ð² Ñĥ Ñħ ĠÑĤ Ð¾Ñĩ ÐµÐº , ĠÐ± ÑĢÐ¾Ñģ Ð¸ÑĤÑĮ ĠIllegalArgumentException Ċ Ġ*/ Ċ fun Ġdiameter ( var arg Ġpoints : ĠPoint ): ĠSegment Ġ{ ĊĠĠĠ Ġif Ġ( points . size Ġ< Ġ 2 ) Ġthrow ĠIllegalArgumentException () ĊĠĠĠ Ġvar Ġresult Ġ= ĠSegment ( points [ 0 ], Ġpoints [ 1 ]) ĊĠĠĠ Ġvar Ġmax D Ġ= Ġ 0 . 0 ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. points . size Ġ- Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġi Ġ+ Ġ 1 Ġuntil Ġpoints . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdistance Ġ= Ġpoints [ i ]. distance ( points [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( distance Ġ> Ġmax D ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmax D Ġ= Ġdistance ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSegment ( points [ i ], Ġpoints [ j ]) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ /** Ċ Ġ* ĠÐŁ ÑĢ Ð¾ÑģÑĤ Ð°Ñı Ġ( 2 ĠÐ± Ð°Ð» Ð»Ð° ) Ċ Ġ* Ċ Ġ* ĠÐŁ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĠÐ¿Ð¾ ĠÐµ Ñĳ ĠÐ´ Ð¸ Ð°Ð¼ ÐµÑĤ ÑĢÑĥ , ĠÐ·Ð°Ð´ Ð°Ð½ Ð½Ð¾Ð¼ Ñĥ ĠÐ´Ð² ÑĥÐ¼ Ñı ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼Ð¸ Ċ Ġ* ĠÐ ¦ ÐµÐ½ÑĤ ÑĢ ĠÐµ Ñĳ ĠÐ´Ð¾Ð»Ð¶ ÐµÐ½ ĠÐ½Ð° ÑħÐ¾Ð´ Ð¸ÑĤÑĮ ÑģÑı ĠÐ¿ Ð¾Ñģ ÐµÑĢ ÐµÐ´ Ð¸Ð½ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼Ð¸ , ĠÐ° ĠÑĢÐ°Ð ´ Ð¸ ÑĥÑģ ĠÑģ Ð¾ÑģÑĤÐ°Ð² Ð»Ñı ÑĤÑĮ ĠÐ¿Ð¾Ð» Ð¾Ð² Ð¸Ð½ Ñĥ ĠÑĢÐ°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ñı ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ½ Ð¸Ð¼ Ð¸ Ċ Ġ*/ Ċ fun Ġcircle By Di ameter ( diameter : ĠSegment ): ĠCircle Ġ{ ĊĠĠĠ Ġval Ġcenter Ġ= ĠPoint (( diameter . begin . x Ġ+ Ġdiameter . end . x ) Ġ/ Ġ 2 , Ġ( diameter . begin . y Ġ+ Ġdiameter . end . y ) Ġ/ Ġ 2 ) ĊĠĠĠ Ġval Ġradius Ġ= Ġdiameter . begin . distance ( diameter . end ) Ġ/ Ġ 2 ĊĠĠĠ Ġreturn ĠCircle ( center , Ġradius ) Ċ } Ċ Ċ /** Ċ Ġ* ĠÐŁ ÑĢ Ñı Ð¼ Ð°Ñı , ĠÐ·Ð°Ð´ Ð°Ð½ Ð½Ð°Ñı ĠÑĤ Ð¾Ñĩ Ðº Ð¾Ð¹ Ġpoint ĠÐ¸ ĠÑĥ Ð³ Ð» Ð¾Ð¼ ĠÐ½ Ð°Ðº Ð» Ð¾Ð½ Ð° Ġangle Ġ( Ð² ĠÑĢÐ°Ð ´ Ð¸ Ð°Ð½ Ð°Ñħ ) ĠÐ¿Ð¾ ĠÐ¾ÑĤ Ð½Ð¾ ÑĪ ÐµÐ½Ð¸ Ñİ ĠÐº ĠÐ¾Ñģ Ð¸ ĠX . Ċ Ġ* ĠÐ£ ÑĢÐ°Ð² Ð½ ÐµÐ½Ð¸Ðµ ĠÐ¿ÑĢ Ñı Ð¼ Ð¾Ð¹ : Ġ( y Ġ- Ġpoint . y ) Ġ* Ġcos ( angle ) Ġ= Ġ( x Ġ- Ġpoint . x ) Ġ* Ġsin ( angle ) Ċ Ġ* ĠÐ¸Ð»Ð¸ : Ġy Ġ* Ġcos ( angle ) Ġ= Ġx Ġ* Ġsin ( angle ) Ġ+ Ġb , ĠÐ³ Ð´Ðµ Ġb Ġ= Ġpoint . y Ġ* Ġcos ( angle ) Ġ- Ġpoint . x Ġ* Ġsin ( angle ). Ċ Ġ* ĠÐ£ Ð³ Ð¾Ð» ĠÐ½ Ð°Ðº Ð» Ð¾Ð½ Ð° ĠÐ¾Ð± ÑıÐ· Ð°Ð½ ĠÐ½Ð° ÑħÐ¾Ð´ Ð¸ÑĤÑĮ ÑģÑı ĠÐ² ĠÐ´ Ð¸ Ð°Ð¿ Ð°Ð· Ð¾Ð½ Ðµ ĠÐ¾ÑĤ Ġ 0 Ġ( Ð² ÐºÐ»ÑİÑĩ Ð¸ÑĤÐµÐ»ÑĮ Ð½Ð¾ ) ĠÐ´Ð¾ ĠPI Ġ( Ð¸Ñģ ÐºÐ»ÑİÑĩ Ð¸ÑĤÐµÐ»ÑĮ Ð½Ð¾ ). Ċ Ġ*/ Ċ class ĠLine Ġprivate Ġconstructor ( val Ġb : ĠDouble , Ġval Ġangle : ĠDouble ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( angle Ġ>= Ġ 0 Ġ&& Ġangle Ġ< ĠPI ) Ġ{ Ġ" Incorrect Ġline Ġangle : Ġ$ angle " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġconstructor ( point : ĠPoint , Ġangle : ĠDouble ) Ġ: Ġthis ( point . y Ġ* Ġcos ( angle ) Ġ- Ġpoint . x Ġ* Ġsin ( angle ), Ġangle ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐ¡ ÑĢÐµÐ´ Ð½Ñı Ñı Ġ( 3 ĠÐ± Ð°Ð» Ð»Ð° ) ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠÐĿ Ð°Ð¹ ÑĤÐ¸ ĠÑĤ Ð¾Ñĩ ÐºÑĥ ĠÐ¿ÐµÑĢ ÐµÑģ ÐµÑĩ ÐµÐ½Ð¸Ñı ĠÑģ ĠÐ´ÑĢÑĥÐ³ Ð¾Ð¹ ĠÐ» Ð¸Ð½ Ð¸ ÐµÐ¹ . ĊĠĠĠĠ Ġ* ĠÐĶ Ð»Ñı ĠÑįÑĤ Ð¾Ð³Ð¾ ĠÐ½Ðµ Ð¾Ð±ÑħÐ¾Ð´ Ð¸Ð¼ Ð¾ ĠÑģ Ð¾ÑģÑĤÐ°Ð² Ð¸ÑĤÑĮ ĠÐ¸ ĠÑĢ ÐµÑĪ Ð¸ÑĤÑĮ ĠÑģÐ¸ÑģÑĤÐµÐ¼ Ñĥ ĠÐ¸Ð· ĠÐ´Ð² Ñĥ Ñħ ĠÑĥ ÑĢÐ°Ð² Ð½ ÐµÐ½Ð¸Ð¹ Ġ( Ðº Ð°Ð¶Ð´ Ð¾Ðµ ĠÐ´Ð»Ñı ĠÑģÐ² Ð¾ ÐµÐ¹ ĠÐ¿ÑĢ Ñı Ð¼ Ð¾Ð¹ ) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcross Point ( other : ĠLine ): ĠPoint Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdenominator Ġ= Ġsin ( other . angle ) Ġ* Ġcos ( angle ) Ġ- Ġsin ( angle ) Ġ* Ġcos ( other . angle ) ĊĠĠĠĠĠĠĠ Ġreturn ĠPoint ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( b Ġ* Ġcos ( other . angle ) Ġ- Ġother . b Ġ* Ġcos ( angle )) Ġ/ Ġdenominator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( b Ġ* Ġsin ( other . angle ) Ġ- Ġother . b Ġ* Ġsin ( angle )) Ġ/ Ġdenominator ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?) Ġ= Ġother Ġis ĠLine Ġ&& Ġangle Ġ== Ġother . angle Ġ&& Ġb Ġ== Ġother . b ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġb . hashCode () ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġ 3 1 Ġ* Ġresult Ġ+ Ġangle . hashCode () ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString () Ġ= Ġ" Line (${ cos ( angle )} Ġ* Ġy Ġ= Ġ${ sin ( angle )} Ġ* Ġx Ġ+ Ġ$ b )" Ċ } Ċ Ċ /** Ċ Ġ* ĠÐ¡ ÑĢÐµÐ´ Ð½Ñı Ñı Ġ( 3 ĠÐ± Ð°Ð» Ð»Ð° ) Ċ Ġ* Ċ Ġ* ĠÐŁ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÐ¿ÑĢ Ñı Ð¼ ÑĥÑİ ĠÐ¿Ð¾ ĠÐ¾ÑĤ ÑĢ ÐµÐ· ÐºÑĥ Ċ Ġ*/ Ċ fun Ġline By Segment ( s : ĠSegment ): ĠLine Ġ= ĠTODO () Ċ Ċ /** Ċ Ġ* ĠÐ¡ ÑĢÐµÐ´ Ð½Ñı Ñı Ġ( 3 ĠÐ± Ð°Ð» Ð»Ð° ) Ċ Ġ* Ċ Ġ* ĠÐŁ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÐ¿ÑĢ Ñı Ð¼ ÑĥÑİ ĠÐ¿Ð¾ ĠÐ´Ð² ÑĥÐ¼ ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼ Ċ Ġ*/ Ċ fun Ġline By Points ( a : ĠPoint , Ġb : ĠPoint ): ĠLine Ġ= ĠLine ( a , Ġ( PI Ġ+ Ġatan (( b . y Ġ- Ġa . y ) Ġ/ Ġ( b . x Ġ- Ġa . x ))) Ġ% ĠPI ) Ċ Ċ /** Ċ Ġ* ĠÐ¡ Ð» Ð¾Ð¶ Ð½Ð°Ñı Ġ( 5 ĠÐ± Ð°Ð» Ð» Ð¾Ð² ) Ċ Ġ* Ċ Ġ* ĠÐŁ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÑģÐµÑĢ ÐµÐ´ Ð¸Ð½ Ð½ÑĭÐ¹ ĠÐ¿ÐµÑĢ Ð¿ ÐµÐ½ Ð´ Ð¸Ðº Ñĥ Ð»Ñı ÑĢ ĠÐ¿Ð¾ ĠÐ¾ÑĤ ÑĢ ÐµÐ· ÐºÑĥ ĠÐ¸Ð»Ð¸ ĠÐ¿Ð¾ ĠÐ´Ð² ÑĥÐ¼ ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼ Ċ Ġ*/ Ċ fun Ġb ise ctor By Points ( a : ĠPoint , Ġb : ĠPoint ): ĠLine Ġ{ ĊĠĠĠ Ġval Ġline Ġ= Ġline By Points ( a , Ġb ) ĊĠĠĠ Ġreturn ĠLine ( Point (( a . x Ġ+ Ġb . x ) Ġ/ Ġ 2 , Ġ( a . y Ġ+ Ġb . y ) Ġ/ Ġ 2 ), Ġabs ( line . angle Ġ+ ĠPI Ġ/ Ġ 2 ) Ġ% ĠPI ) Ċ } Ċ Ċ /** Ċ Ġ* ĠÐ¡ ÑĢÐµÐ´ Ð½Ñı Ñı Ġ( 3 ĠÐ± Ð°Ð» Ð»Ð° ) Ċ Ġ* Ċ Ġ* ĠÐĹ Ð°Ð´ Ð°Ð½ ĠÑģÐ¿Ð¸Ñģ Ð¾Ðº ĠÐ¸Ð· Ġn ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤ ÐµÐ¹ ĠÐ½Ð° ĠÐ¿Ð» Ð¾Ñģ Ðº Ð¾ÑģÑĤ Ð¸ . Ċ Ġ* ĠÐĿ Ð°Ð¹ ÑĤÐ¸ ĠÐ¿ Ð° ÑĢÑĥ ĠÐ½Ð° Ð¸Ð¼ ÐµÐ½ ÐµÐµ ĠÑĥ Ð´Ð°Ð» Ñĳ Ð½ Ð½ÑĭÑħ ĠÐ¸Ð· ĠÐ½ Ð¸Ñħ ; ĠÑĢÐ°Ñģ ÑģÑĤ Ð¾Ñı Ð½Ð¸ Ðµ ĠÐ¼ ÐµÐ¶ Ð´Ñĥ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤ Ñı Ð¼Ð¸ Ċ Ġ* ĠÑĢ Ð°ÑģÑģ Ñĩ Ð¸ÑĤ ÑĭÐ² Ð°ÑĤÑĮ ĠÑĤÐ°Ðº , ĠÐºÐ°Ðº ĠÑĥÐºÐ°Ð· Ð°Ð½ Ð¾ ĠÐ² ĠCircle . distance . Ċ Ġ* Ċ Ġ* ĠÐŁ ÑĢÐ¸ ĠÐ½Ð° Ð»Ð¸Ñĩ Ð¸Ð¸ ĠÐ½ ÐµÑģ Ðº Ð¾Ð»ÑĮ ÐºÐ¸ Ñħ ĠÐ½Ð° Ð¸Ð¼ ÐµÐ½ ÐµÐµ ĠÑĥ Ð´Ð°Ð» Ñĳ Ð½ Ð½ÑĭÑħ ĠÐ¿ Ð°ÑĢ , Ċ Ġ* ĠÐ²ÐµÑĢ Ð½ Ñĥ ÑĤÑĮ ĠÐ¿ÐµÑĢ Ð² ÑĥÑİ ĠÐ¸Ð· ĠÐ½ Ð¸Ñħ ĠÐ¿Ð¾ ĠÐ¿ Ð¾ÑĢ Ñı Ð´ ÐºÑĥ ĠÐ² ĠÑģÐ¿Ð¸Ñģ ÐºÐµ Ġcircles . Ċ Ġ* Ċ Ġ* ĠÐķÑģÐ»Ð¸ ĠÐ² ĠÑģÐ¿Ð¸Ñģ ÐºÐµ ĠÐ¼ÐµÐ½ ÐµÐµ ĠÐ´Ð² Ñĥ Ñħ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤ ÐµÐ¹ , ĠÐ± ÑĢÐ¾Ñģ Ð¸ÑĤÑĮ ĠIllegalArgumentException Ċ Ġ*/ Ċ fun Ġfind Nearest Circle Pair ( var arg Ġcircles : ĠCircle ): ĠPair < Circle , ĠCircle > Ġ= ĠTODO () Ċ Ċ /** Ċ Ġ* ĠÐ¡ Ð» Ð¾Ð¶ Ð½Ð°Ñı Ġ( 5 ĠÐ± Ð°Ð» Ð» Ð¾Ð² ) Ċ Ġ* Ċ Ġ* ĠÐĶ Ð°Ð½ Ð¾ ĠÑĤ ÑĢÐ¸ ĠÑĢÐ°Ð· Ð»Ð¸Ñĩ Ð½ÑĭÐµ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ . ĠÐŁ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ , ĠÐ¿ÑĢÐ¾ ÑħÐ¾Ð´ Ñı Ñī ÑĥÑİ ĠÑĩ ÐµÑĢ ÐµÐ· ĠÐ½ Ð¸Ñħ Ċ Ġ* Ġ( Ð² Ñģ Ðµ ĠÑĤ ÑĢÐ¸ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ ĠÐ´Ð¾Ð»Ð¶ Ð½Ñĭ ĠÐ» ÐµÐ¶ Ð°ÑĤÑĮ ĠÐĿ ÐĲ , ĠÐ° ĠÐ½Ðµ ĠÐĴ ÐĿ Ð£ Ð¢ Ðł Ðĺ , ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÐ¸ ). Ċ Ġ* ĠÐŀ Ð¿Ð¸Ñģ Ð°Ð½Ð¸Ðµ ĠÐ° Ð» Ð³ Ð¾ÑĢ Ð¸ÑĤ Ð¼ Ð¾Ð² ĠÑģÐ¼ . ĠÐ² ĠÐĺ Ð½ ÑĤÐµÑĢ Ð½ ÐµÑĤ Ðµ Ċ Ġ* Ġ( Ð¿ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĠÐ¿Ð¾ ĠÑĤÑĢ Ñĳ Ð¼ ĠÑĤ Ð¾Ñĩ Ðº Ð°Ð¼ , ĠÐ¸Ð»Ð¸ Ċ Ġ* ĠÐ¿ Ð¾ÑģÑĤ ÑĢÐ¾ Ð¸ÑĤÑĮ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ , ĠÐ¾Ð¿ Ð¸Ñģ Ð°Ð½ Ð½ÑĥÑİ ĠÐ² Ð¾Ðº ÑĢÑĥÐ³ ĠÑĤÑĢ Ðµ Ñĥ Ð³ Ð¾Ð»ÑĮ Ð½Ð¸ ÐºÐ° Ġ- ĠÑįÐº Ð² Ð¸Ð² Ð°Ð» ÐµÐ½ÑĤ Ð½Ð°Ñı ĠÐ·Ð°Ð´ Ð°Ñĩ Ð° ). Ċ Ġ*/ Ċ fun Ġcircle By Three Points ( a : ĠPoint , Ġb : ĠPoint , Ġc : ĠPoint ): ĠCircle Ġ{ ĊĠĠĠ Ġval Ġcenter Ġ= Ġb ise ctor By Points ( a , Ġb ). cross Point ( b ise ctor By Points ( b , Ġc )) ĊĠĠĠ Ġreturn ĠCircle ( center , Ġcenter . distance ( a )) Ċ } Ċ Ċ /** Ċ Ġ* ĠÐŀ Ñĩ ÐµÐ½ÑĮ ĠÑģÐ» Ð¾Ð¶ Ð½Ð°Ñı Ġ( 1 0 ĠÐ± Ð°Ð» Ð» Ð¾Ð² ) Ċ Ġ* Ċ Ġ* ĠÐĶ Ð°Ð½ Ð¾ ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ²Ð¾ ĠÑĤ Ð¾Ñĩ ÐµÐº ĠÐ½Ð° ĠÐ¿Ð» Ð¾Ñģ Ðº Ð¾ÑģÑĤ Ð¸ . ĠÐĿ Ð°Ð¹ ÑĤÐ¸ ĠÐº ÑĢÑĥÐ³ ĠÐ¼ Ð¸Ð½ Ð¸Ð¼ Ð°Ð»ÑĮ Ð½Ð¾Ð³Ð¾ ĠÑĢÐ°Ð ´ Ð¸ ÑĥÑģ Ð° , Ċ Ġ* ĠÑģ Ð¾Ð´ÐµÑĢÐ¶ Ð° ÑīÐ¸Ð¹ ĠÐ²ÑģÐµ ĠÑį ÑĤÐ¸ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ . ĠÐķÑģÐ»Ð¸ ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ²Ð¾ ĠÐ¿ ÑĥÑģÑĤ Ð¾Ðµ , ĠÐ± ÑĢÐ¾Ñģ Ð¸ÑĤÑĮ ĠIllegalArgumentException . Ċ Ġ* ĠÐķÑģÐ»Ð¸ ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ²Ð¾ ĠÑģ Ð¾Ð´ÐµÑĢÐ¶ Ð¸ÑĤ ĠÐ¾Ð´ Ð½ Ñĥ ĠÑĤ Ð¾Ñĩ ÐºÑĥ , ĠÐ²ÐµÑĢ Ð½ Ñĥ ÑĤÑĮ ĠÐº ÑĢÑĥÐ³ ĠÐ½ Ñĥ Ð» ÐµÐ² Ð¾Ð³Ð¾ ĠÑĢÐ°Ð ´ Ð¸ ÑĥÑģ Ð° ĠÑģ ĠÑĨ ÐµÐ½ÑĤ ÑĢ Ð¾Ð¼ ĠÐ² ĠÐ´Ð°Ð½ Ð½Ð¾Ð¹ ĠÑĤ Ð¾Ñĩ ÐºÐµ . Ċ Ġ* Ċ Ġ* ĠÐŁ ÑĢ Ð¸Ð¼ ÐµÑĩ Ð°Ð½Ð¸Ðµ : ĠÐ² ĠÐ· Ð°Ð² Ð¸Ñģ Ð¸Ð¼Ð¾ÑģÑĤ Ð¸ ĠÐ¾ÑĤ ĠÑģ Ð¸ÑĤ Ñĥ Ð°ÑĨÐ¸Ð¸ , ĠÑĤÐ°Ðº Ð°Ñı ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĠÐ¼Ð¾Ð¶ÐµÑĤ ĠÐ» Ð¸Ð± Ð¾ ĠÐ¿ÑĢÐ¾ ÑħÐ¾Ð´ Ð¸ÑĤÑĮ ĠÑĩ ÐµÑĢ ÐµÐ· ĠÐºÐ°Ðº Ð¸Ðµ - Ð»Ð¸ Ð± Ð¾ Ċ Ġ* ĠÑĤ ÑĢÐ¸ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ ĠÐ´Ð°Ð½ Ð½Ð¾Ð³Ð¾ ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ² Ð° , ĠÐ» Ð¸Ð± Ð¾ ĠÐ¸Ð¼ ÐµÑĤ ÑĮ ĠÑģÐ² Ð¾ Ð¸Ð¼ ĠÐ´ Ð¸ Ð°Ð¼ ÐµÑĤ ÑĢ Ð¾Ð¼ ĠÐ¾ÑĤ ÑĢ ÐµÐ· Ð¾Ðº , Ċ Ġ* ĠÑģÐ¾ ÐµÐ´ Ð¸Ð½ Ñı Ñİ ÑīÐ¸Ð¹ ĠÐ´Ð² Ðµ ĠÑģ Ð°Ð¼ ÑĭÐµ ĠÑĥ Ð´Ð°Ð» Ñĳ Ð½ Ð½ÑĭÐµ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ ĠÐ² ĠÐ´Ð°Ð½ Ð½Ð¾Ð¼ ĠÐ¼ Ð½ Ð¾Ð¶ ÐµÑģÑĤÐ² Ðµ . Ċ Ġ*/ Ċ fun Ġmin Containing Circle ( var arg Ġpoints : ĠPoint ): ĠCircle Ġ{ ĊĠĠĠ Ġif Ġ( points . isEmpty ()) Ġthrow ĠIllegalArgumentException () ĊĠĠĠ Ġif Ġ( points . size Ġ== Ġ 1 ) Ġreturn ĠCircle ( points [ 0 ], Ġ 0 . 0 ) ĊĠĠĠ Ġval Ġlong D Ġ= Ġdiameter (* points ) ĊĠĠĠ Ġval Ġres Circle Ġ= Ġcircle By Di ameter ( long D ) ĊĠĠĠ Ġval Ġpoint Ġ= Ġpoints . max By OrNull Ġ{ Ġit . distance ( res Circle . center ) Ġ} !! ĊĠĠĠ Ġreturn Ġif Ġ( point Ġ== Ġlong D . begin Ġ|| Ġpoint Ġ== Ġlong D . end ) Ġres Circle ĊĠĠĠ Ġelse Ġcircle By Three Points ( long D . begin , Ġlong D . end , Ġpoint ) Ċ } Ċ Ċ /* if Ġ( points . isEmpty ()) Ġthrow ĠIllegalArgumentException () ĊĠĠĠ Ġif Ġ( points . size Ġ== Ġ 1 ) Ġreturn ĠCircle ( points [ 0 ], Ġ 0 . 0 ) ĊĠĠĠ Ġval Ġtwo Point Di ameter Ġ= Ġdiameter (* points ); ĊĠĠĠ Ġvar Ġcircle Ġ= Ġcircle By Di ameter ( two Point Di ameter ) ĊĠĠĠ Ġ// ĠÐµÑģÐ»Ð¸ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ Ġ 2 , ĠÑĤÐ¾ ĠÐ²Ð¾Ð· Ð²ÑĢÐ°Ñī Ð°ÐµÐ¼ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĊĠĠĠ Ġif Ġ( points . size Ġ== Ġ 2 ) Ġreturn Ġcircle ĊĠĠĠ Ġfor Ġ( pt Ġin Ġpoints ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! circle . contains ( pt )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcircle Ġ= Ġcircle By Three Points ( two Point Di ameter . begin , Ġtwo Point Di ameter . end , Ġpt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcircle Ċ }*/ Ċ /* val Ġtwo Point Di ameter Ġ= Ġdiameter (* points ); ĊĠĠĠ Ġvar Ġcircle Ġ= Ġcircle By Di ameter ( two Point Di ameter ) ĊĠĠĠ Ġ// ĠÐµÑģÐ»Ð¸ ĠÑĤ Ð¾Ñĩ ÐºÐ¸ Ġ 2 , ĠÑĤÐ¾ ĠÐ²Ð¾Ð· Ð²ÑĢÐ°Ñī Ð°ÐµÐ¼ ĠÐ¾ Ðº ÑĢÑĥ Ð¶ Ð½Ð¾ÑģÑĤÑĮ ĊĠĠĠ Ġif Ġ( points . size Ġ== Ġ 2 ) Ġreturn Ġcircle ĊĠĠĠ Ġval Ġout points Ġ= Ġarray ListOf < Point >() ĊĊĠĠĠ Ġfor Ġ( pt Ġin Ġpoints ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! circle . contains ( pt )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġout points . add ( pt ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( out points . size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcircle ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġcenter Ġ= ĠPoint (( two Point Di ameter . begin . x Ġ+ Ġtwo Point Di ameter . end . x ) Ġ/ Ġ 2 ,( two Point Di ameter . begin . y Ġ+ Ġtwo Point Di ameter . end . y )) ĊĠĠĠ Ġvar Ġmax Ġ= Ġ 0 . 0 ĊĠĠĠ Ġfor Ġ( pt Ġin Ġout points ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġcenter . distance ( pt ) ĊĠĠĠĠĠĠĠ Ġif Ġ( c Ġ> Ġmax ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmax Ġ= Ġc ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġif Ġ( max Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠCircle ( center , Ġmax ) ĊĠĠĠ Ġ} Ġelse ĊĠĠĠĠĠĠĠ Ġcircle Ċ }*/ Ċ