package Ġcom . me chan ica . engine . geometry . shapes Ċ Ċ import Ġcom . c ave . library . vector . vec 2 . Vector 2 Ċ import Ġcom . c ave . library . vector . vec 2 . cross Ċ import Ġcom . c ave . library . vector . vec 2 . minus Ċ import Ġcom . c ave . library . vector . vec 2 . vec Ċ import Ġkotlin . math . sign ĊĊ Ċ interface ĠTriangle Ġ{ ĊĠĠĠ Ġval Ġa : ĠVector 2 ĊĠĠĠ Ġval Ġb : ĠVector 2 ĊĠĠĠ Ġval Ġc : ĠVector 2 ĊĊĠĠĠ Ġfun Ġcontains ( point : ĠVector 2 ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġvec ( a ) ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġvec ( b ) ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġvec ( c ) ĊĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= Ġvec ( point ) ĊĊĠĠĠĠĠĠĠ Ġval Ġp ab Ġ= Ġ( p Ġ- Ġa ). cross ( b Ġ- Ġa ). sign ĊĠĠĠĠĠĠĠ Ġval Ġp bc Ġ= Ġ( p Ġ- Ġb ). cross ( c Ġ- Ġb ). sign ĊĊĠĠĠĠĠĠĠ Ġif Ġ( p ab Ġ== Ġ 0 . 0 Ġ|| Ġp bc Ġ== Ġ 0 . 0 ) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġif Ġ( p ab Ġ!= Ġp bc ) Ġreturn Ġ- 1 ĊĊĠĠĠĠĠĠĠ Ġval Ġp ca Ġ= Ġ( p Ġ- Ġc ). cross ( a Ġ- Ġc ). sign ĊĠĠĠĠĠĠĠ Ġif Ġ( pca Ġ== Ġ 0 . 0 ) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( p ab Ġ== Ġp ca ) Ġreturn Ġ 1 Ġelse Ġ- 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġcomponent 1 () Ġ= Ġa ĊĠĠĠ Ġoperator Ġfun Ġcomponent 2 () Ġ= Ġb ĊĠĠĠ Ġoperator Ġfun Ġcomponent 3 () Ġ= Ġc ĊĊĠĠĠ Ġoperator Ġfun Ġget ( i : ĠInt ): ĠVector 2 Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( i ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġa ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġc ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠArray Index OutOfBoundsException (" Tri ed Ġto Ġget Ġindex Ġ 3 Ġof Ġa Ġtriangle ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġhas Points ( p 1 : ĠVector 2 , Ġp 2 : ĠVector 2 ) Ġ= Ġhas Point ( p 1 ) Ġ&& Ġhas Point ( p 2 ) ĊĊĠĠĠ Ġfun Ġhas Point ( p : ĠVector 2 ) Ġ= Ġa Ġ== Ġp Ġ|| Ġb Ġ== Ġp Ġ|| Ġc Ġ== Ġp ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( a : ĠVector 2 , Ġb : ĠVector 2 , Ġc : ĠVector 2 ): ĠTriangle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠTriangle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġa : ĠVector 2 Ġ= ĠVector 2 . create ( a ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġb : ĠVector 2 Ġ= ĠVector 2 . create ( b ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġc : ĠVector 2 Ġ= ĠVector 2 . create ( c ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate () Ġ= Ġcreate ( vec ( 0 . 0 , Ġ 0 . 0 ), Ġvec ( 0 . 5 , Ġ 1 . 0 ), Ġvec ( 1 . 0 , Ġ 0 . 0 )) ĊĠĠĠ Ġ} Ċ } ĊĊĊ