/* Ċ Ġ* ĠGAME Lib , ĠGe ometric ĠAnd ĠMathematic al ĠExtension ĠLibrary Ċ Ġ* ĠCopyright Ġ( C ) ĠMat th ias ĠK ov ac ic Ġ< mat th ias . kov ac ic @ student . k ule u ven . be > Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġfree Ġsoftware : Ġyou Ġcan Ġredistribute Ġit Ġand / or Ġmodify Ċ Ġ* Ġit Ġunder Ġthe Ġterms Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ġas Ġpublished Ġby Ċ Ġ* Ġthe ĠFree ĠSoftware ĠFoundation , Ġeither Ġversion Ġ 3 Ġof Ġthe ĠLicense , Ġor Ċ Ġ* Ġ( at Ġyour Ġoption ) Ġany Ġlater Ġversion . Ċ Ġ* Ċ Ġ* ĠThis Ġprogram Ġis Ġdistributed Ġin Ġthe Ġhope Ġthat Ġit Ġwill Ġbe Ġuseful , Ċ Ġ* Ġbut ĠWITHOUT ĠANY ĠWARRANTY ; Ġwithout Ġeven Ġthe Ġimplied Ġwarranty Ġof Ċ Ġ* ĠMERCHANTABILITY Ġor ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE . Ġ ĠSee Ġthe Ċ Ġ* ĠGNU ĠGeneral ĠPublic ĠLicense Ġfor Ġmore Ġdetails . Ċ Ġ* Ċ Ġ* ĠYou Ġshould Ġhave Ġreceived Ġa Ġcopy Ġof Ġthe ĠGNU ĠGeneral ĠPublic ĠLicense Ċ Ġ* Ġalong Ġwith Ġthis Ġprogram . Ġ ĠIf Ġnot , Ġsee Ġ< https :// www . gnu . org / licenses />. Ċ Ġ*/ Ċ Ċ package Ġcom . github . poly rocket mat t . game . math . geometry . shape Ċ Ċ import Ġcom . github . poly rocket mat t . game . Vec 2 f Ċ import Ġcom . github . poly rocket mat t . game . Vec 3 f Ċ import Ġcom . github . poly rocket mat t . game . math . geometry . primitive . Circle Ċ import Ġcom . github . poly rocket mat t . game . math . geometry . primitive . Edge Ċ import Ġcom . github . poly rocket mat t . game . math . geometry . primitive . Segment Ċ import Ġcom . github . poly rocket mat t . game . math . numeric . sum Of Ċ import Ġkotlin . math . sin Ċ import Ġkotlin . math . tan Ċ Ċ /** Ċ Ġ* ĠDefines Ġa Ġtriangle Ġshape Ġbased Ġon Ġthree Ġtwo - dimensional Ġvectors . Ċ Ġ* ĠThis Ġdata - structure Ġalso Ġimplements Ġvarious Ġinteresting Ġproperties Ċ Ġ* Ġrelated Ġto Ġa Ġtriangle . Ċ Ġ*/ Ċ class ĠTriangle ( val Ġa : ĠVec 2 f , Ġval Ġb : ĠVec 2 f , Ġval Ġc : ĠVec 2 f ) Ġ: ĠShape Ġ{ ĊĊĠĠĠ Ġconstructor ( shape Vertices : ĠTrip le < Vec 2 f , ĠVec 2 f , ĠVec 2 f >) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: Ġthis ( shape Vertices . first , Ġshape Vertices . second , Ġshape Vertices . third ) ĊĊĠĠĠ Ġprivate Ġval Ġpolygon Ġ= ĠConv ex Polygon ( array ListOf ( a , Ġb , Ġc )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġpolygon Ġdefining Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġconvex Ġpolygon Ġrepresentation Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġpolygon (): ĠConv ex Polygon Ġ= Ġpolygon ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcenter Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcenter Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġcenter (): ĠVec 2 f Ġ= Ġpolygon . center () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġvertices Ġof Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvertices Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġvertices (): ĠList < Vec 2 f > Ġ= Ġpolygon . vertices ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġedges Ġof Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġedges Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġedges (): ĠList < Edge > Ġ= Ġpolygon . edges ĊĊĠĠĠ Ġoverride Ġfun Ġsegments (): ĠList < Segment > Ġ= Ġedges (). map Ġ{ Ġedge Ġ-> Ġedge . segment () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġvertices Ġof Ġthe Ġtriangle Ġand Ġtheir Ġangle Ġwhich ĊĠĠĠĠ Ġ* Ġis Ġstored Ġin Ġthe Ġthird Ġcomponent Ġof Ġthe Ġresulting Ġvectors . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġvertices Ġand Ġtheir Ġangle Ġof Ġthe Ġtriangle Ġin Ġradians ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvertices Ang Angles (): ĠArrayList < Vec 3 f > Ġ= ĠArrayList ( vertices (). map Indexed Ġ{ Ġidx , Ġvec Ġ-> ĠVec 3 f ( vec . x , Ġvec . y , Ġpolygon . angles [ idx ]) Ġ}) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcentroid Ġof Ġthe Ġtriangle Ġwhich Ġis Ġthe ĊĠĠĠĠ Ġ* Ġcenter Ġof Ġthe Ġpolygon . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcentroid Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcentroid (): ĠVec 2 f Ġ= Ġpolygon . center ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcircum center Ġof Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcircum center Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcircum Center (): ĠVec 2 f Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġedges ()[ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġedges ()[ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġgrad A Ġ= Ġ- 1 . 0 f Ġ/ Ġa . gradient ĊĠĠĠĠĠĠĠ Ġval Ġgrad B Ġ= Ġ- 1 . 0 f Ġ/ Ġb . gradient ĊĠĠĠĠĠĠĠ Ġval Ġc A Ġ= Ġa . center ĊĠĠĠĠĠĠĠ Ġval Ġc B Ġ= Ġb . center ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġ(( c B . y Ġ- Ġc A . y ) Ġ+ Ġ( grad A Ġ* Ġ Ġc A . x Ġ- Ġgrad B Ġ* Ġc B . y )) Ġ/ Ġ( grad A Ġ- Ġgrad B ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠVec 2 f ( y Ġ- Ġc A . y Ġ+ Ġgrad A Ġ* Ġc A . x , Ġy ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġcircum circle Ġof Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġcircum circle Ġof Ġthe Ġtriangle ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcircum Circle (): ĠCircle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= Ġcircum Center () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠTake Ġthe Ġfirst Ġvertex ' Ġangle ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= Ġpolygon . angles [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠThe Ġopposite Ġedge Ġis Ġalways Ġthe Ġsecond Ġedge Ġthat Ġwas Ġadded ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġpolygon . edges [ 1 ]. length ĊĠĠĠĠĠĠĠ Ġval Ġrad Ġ= Ġ( length Ġ/ Ġsin ( angle )) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCircle ( Vec 3 f ( center . x , Ġcenter . y , Ġrad )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGet Ġthe Ġin scribed Ġcircle Ġof Ġthe Ġtriangle . ĊĠĠĠĠ Ġ* ĠT aken Ġfrom : Ġhttps :// openc ur riculum . org / 5 4 9 2 / circ um scribed - and - in scribed - circ les / ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġthe Ġsum Ġof Ġall Ġvalues Ġproduced Ġby Ġselector Ġfunction Ġapplied Ġto Ġeach Ġelement Ġin Ġthe Ġcollection . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġin scribed Circle (): ĠCircle Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcenter Ġ= Ġcentroid () ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠTake Ġthe Ġsum Ġof Ġthe Ġlength Ġof Ġthe Ġedges ĊĠĠĠĠĠĠĠ Ġval Ġs Ġ= Ġ 0 . 5 f Ġ* Ġpolygon . edges . sum Of Ġ{ Ġedge Ġ-> Ġedge . length Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ ĠTake Ġthe Ġfirst Ġvertex ' Ġangle Ġand Ġoperate Ġon Ġit ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġtan ( polygon . angles [ 0 ] Ġ* Ġ 0 . 5 f ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThe Ġopposite Ġedge Ġis Ġalways Ġthe Ġsecond Ġedge Ġthat Ġwas Ġadded ĊĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġpolygon . edges [ 1 ]. length ĊĊĠĠĠĠĠĠĠ Ġreturn ĠCircle ( Vec 3 f ( center . x , Ġcenter . y , Ġ( s Ġ- Ġlength ) Ġ* Ġt )) ĊĠĠĠ Ġ} Ċ Ċ }