/* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 0 - 2 0 1 6 ĠW illiam ĠBit tle Ġ Ġhttp :// www . dyn 4 j . org / Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* ĠĊ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ġmodification , Ġare Ġpermitted ĠĊ Ġ* Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* ĠĊ Ġ* ĠĠ Ġ* ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions ĠĊ Ġ* ĠĠĠĠ Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* ĠĠ Ġ* ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ġlist Ġof Ġconditions ĠĊ Ġ* ĠĠĠĠ Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe ĠĊ Ġ* ĠĠĠĠ Ġdistribution . Ċ Ġ* ĠĠ Ġ* ĠNeither Ġthe Ġname Ġof Ġdyn 4 j Ġnor Ġthe Ġnames Ġof Ġits Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor ĠĊ Ġ* ĠĠĠĠ Ġpromote Ġproducts Ġderived Ġfrom Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* ĠĊ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " ĠAND ĠANY ĠEXPRESS ĠOR ĠĊ Ġ* ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠĊ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠOWNER ĠOR ĠĊ Ġ* ĠCONTRIBUTORS ĠBE ĠLIABLE ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL ĠĊ Ġ* ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠĊ Ġ* ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠĊ Ġ* ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠĊ Ġ* ĠOF ĠTHE ĠUSE ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġorg . dyn 4 j . geometry Ċ Ċ import Ġorg . dyn 4 j . Data Container Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġ[ Convex ] Ġ[ Shape ]. Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠA Ġ[ Convex ] Ġ[ Shape ] Ġis Ġa Ġ[ Shape ] Ġthat Ġgiven Ġa Ġline , Ġthe Ġline Ġwill Ġonly Ċ Ġ* Ġintersect Ġat Ġmost Ġ 2 Ġnon - co incident Ġnon - col ine ar Ġedges . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠWorking Ġwith Ġconvex Ġshapes Ġspecifically Ġallows Ġcollision Ġdetection Ġalgorithms Ġto Ġbe Ġvery Ċ Ġ* Ġfast . Ġ ĠIf Ġnon - conv ex Ġshapes Ġare Ġrequired , Ġthey Ġare Ġtypically Ġhandled Ġby Ġatt aching Ġmultiple Ċ Ġ* Ġconvex Ġshapes Ġtogether . Ċ Ġ* Ġ@ author ĠW illiam ĠBit tle Ċ Ġ* Ġ@ version Ġ 1 . 0 . 3 Ċ Ġ* Ġ@ since Ġ 1 . 0 . 0 Ċ Ġ*/ Ċ interface ĠConv ex Ġ: ĠShape , ĠTransform able , ĠData Container Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġarray Ġof Ġsepar ating Ġaxes Ġto Ġtest Ġfor Ġthis Ġ[ Shape ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġ` f oci ` Ġparameter Ġis Ġan Ġarray Ġof Ġ** circular ** Ġf ocal Ġpoints Ġof Ġthe Ġother Ġ[ Shape ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIf Ġf oci Ġpoints Ġare Ġgiven , Ġthis Ġmethod Ġwill Ġreturn Ġthe Ġsepar ating Ġaxes Ġfor Ġthis Ġ[ Shape ]' s Ġvor on oi Ġregions ĊĠĠĠĠ Ġ* Ġalso . Ġ ĠThe Ġpoints Ġin Ġthe Ġf oci Ġarray Ġare Ġassumed Ġto Ġbe Ġin Ġworld Ġspace . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġaxes Ġare Ġnormalized Ġand Ġin Ġworld Ġspace . ĊĠĠĠĠ Ġ* Ġ@ param Ġf oci Ġthe Ġworld Ġspace Ġpoints Ġrepresenting Ġf oci Ġof Ġcur ved Ġ[ Shape ] s ; Ġcan Ġbe Ġnull ĊĠĠĠĠ Ġ* Ġ@ param Ġtransform Ġthe Ġlocal Ġto Ġworld Ġspace Ġ[ Transform ] Ġof Ġthis Ġ[ Convex ] Ġ[ Shape ] ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Vector 2 ][] ĊĠĠĠĠ Ġ* Ġ@ throws ĠUnsupportedOperationException Ġif Ġthis Ġshape Ġdoesn 't Ġsupport Ġthis Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget Axes ( f oci : ĠArray < Vector 2 > ?, Ġtransform : ĠTransform ): ĠArray < Vector 2 >? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġan Ġarray Ġof Ġworld Ġspace Ġf oci Ġpoints Ġfor Ġ** circular ** Ġcur ved Ġedges . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThis Ġmethod Ġreturns Ġnull Ġif Ġthe Ġ[ Shape ] Ġhas Ġzero Ġcur ved Ġedges . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġpoints Ġare Ġin Ġworld Ġspace . ĊĠĠĠĠ Ġ* Ġ@ param Ġtransform Ġthe Ġlocal Ġto Ġworld Ġspace Ġ[ Transform ] Ġof Ġthis Ġ[ Convex ] Ġ[ Shape ] ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Vector 2 ][] ĊĠĠĠĠ Ġ* Ġ@ throws ĠUnsupportedOperationException Ġif Ġthis Ġshape Ġdoesn 't Ġsupport Ġthis Ġmethod ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget F oci ( transform : ĠTransform ): ĠArray < Vector 2 >? ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġ[ Feature ] Ġf art hest Ġin Ġthe Ġdirection Ġof Ġthe Ġgiven Ġvector . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġfeature Ġis Ġin Ġworld Ġspace . ĊĠĠĠĠ Ġ* Ġ@ param Ġvector Ġthe Ġdirection ĊĠĠĠĠ Ġ* Ġ@ param Ġtransform Ġthe Ġlocal Ġto Ġworld Ġspace Ġ[ Transform ] Ġof Ġthis Ġ[ Convex ] Ġ[ Shape ] ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Feature ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget F art hest Feature ( vector : ĠVector 2 , Ġtransform : ĠTransform ): ĠFeature ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġpoint Ġf art hest Ġin Ġthe Ġdirection Ġof Ġthe Ġgiven Ġvector . Ġ ĠIf Ġtwo Ġpoints Ġare ĊĠĠĠĠ Ġ* Ġequ ally Ġdist ant Ġalong Ġthe Ġgiven Ġ[ Vector 2 ] Ġthe Ġfirst Ġone Ġis Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠThe Ġreturned Ġpoint Ġis Ġin Ġworld Ġspace . ĊĠĠĠĠ Ġ* Ġ@ param Ġvector Ġthe Ġdirection ĊĠĠĠĠ Ġ* Ġ@ param Ġtransform Ġthe Ġlocal Ġto Ġworld Ġspace Ġ[ Transform ] Ġof Ġthis Ġ[ Convex ] Ġ[ Shape ] ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ Vector 2 ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġget F art hest Point ( vector : ĠVector 2 , Ġtransform : ĠTransform ): ĠVector 2 Ċ }