package Ġcom . se v enc ray ons . compass Ċ Ċ import Ġandroid . content . Context Ċ import Ġcom . se v enc ray ons . compass . S OT W Formatter Ċ import Ġcom . se v enc ray ons . compass . R Ċ Ċ /** Ċ Ġ* ĠS OT W Ġis Ġshort ĠSide ĠOf ĠThe ĠWorld Ċ Ġ* Ċ Ġ* ĠThe Ġclass Ġhelps Ġto Ġconvert Ġaz imuth Ġdegrees Ġto Ġhuman Ġreadable Ċ Ġ* Ġlabel Ġlike Ġ" 2 4 2 Â° ĠSW " Ġor Ġ" 0 Â° ĠN " Ċ Ġ* Ċ Ġ* ĠThis Ġis Ġa Ġtask Ġof Ġfinding Ġthe Ġclosest Ġelement Ġin Ġthe Ġarray . Ċ Ġ* ĠBinary Ġsearch Ġis Ġused Ġto Ġsave Ġsome ĠCPU . Ċ Ġ* Ċ Ġ* ĠCop ied Ġwith Ġmodifications Ġfrom Ċ Ġ* Ġhttps :// www . ge eks forge eks . org / find - closest - number - array / Ċ Ġ*/ Ċ class ĠS OT W Formatter ( context : ĠContext ) Ġ{ ĊĠĠĠ Ġfun Ġformat ( az imuth : ĠFloat ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġi Az imuth Ġ= Ġaz imuth . toInt () ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġfind Closest Index ( i Az imuth ) ĊĠĠĠĠĠĠĠ Ġreturn Ġi Az imuth . toString () Ġ+ Ġ" Â° Ġ" Ġ+ Ġnames ! ![ index ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Localized Names ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġit Ġwill Ġbe Ġlocalized Ġversion Ġof ĊĠĠĠĠĠĠĠ Ġ// Ġ{" N ", Ġ" NE ", Ġ" E ", Ġ" SE ", Ġ" S ", Ġ" SW ", Ġ" W ", Ġ" NW ", Ġ" N "} ĊĠĠĠĠĠĠĠ Ġ// Ġyes , ĠN Ġis Ġtwice , Ġfor Ġ 0 Ġand Ġfor Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( names Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnames Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ north ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ northeast ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ east ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ sout heast ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ south ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ sout hw est ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ west ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ north west ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . s ot w _ north ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġsides Ġ= Ġint ArrayOf ( 0 , Ġ 4 5 , Ġ 9 0 , Ġ 1 3 5 , Ġ 1 8 0 , Ġ 2 2 5 , Ġ 2 7 0 , Ġ 3 1 5 , Ġ 3 6 0 ) ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġnames : ĠArray < String >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFinds Ġindex Ġof Ġthe Ġclosest Ġelement Ġto Ġidentify ĠSide ĠOf ĠThe ĠWorld Ġlabel ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġtarget ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return Ġindex Ġof Ġthe Ġclosest Ġelement ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġfind Closest Index ( target : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġthe Ġoriginal Ġbinary Ġsearch Ġhttps :// www . ge eks forge eks . org / find - closest - number - array / ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġyou Ġwill Ġsee Ġmore Ġsteps Ġto Ġreduce Ġthe Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġin Ġin Ġthis Ġparticular Ġcase Ġthe Ġcorner Ġconditions Ġare Ġnever Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġe . g . Ġaz imuth Ġis Ġnever Ġnegative , Ġso Ġthere Ġis Ġno Ġpoint Ġto Ġcheck ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġthese Ġconditions . ĠAlso Ġwe Ġdon 't Ġcheck Ġif Ġtarget Ġis Ġequal Ġto Ġelement Ġof Ġarray , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġbecause Ġmost Ġof Ġthe Ġtime Ġit 's Ġnot . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġand Ġthe Ġmain Ġdifference Ġis Ġit Ġfinds Ġthe Ġindex , Ġnot Ġthe Ġvalue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDo ing Ġbinary Ġsearch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġj Ġ= Ġsides . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmid Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( i Ġ< Ġj ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmid Ġ= Ġ( i Ġ+ Ġj ) Ġ/ Ġ 2 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠIf Ġtarget Ġis Ġless Ġthan Ġarray Ġelement , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthen Ġsearch Ġin Ġleft Ġ*/ if Ġ( target Ġ< Ġsides [ mid ]) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġtarget Ġis Ġgreater Ġthan Ġprevious ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġto Ġmid , Ġreturn Ġclosest Ġof Ġtwo ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mid Ġ> Ġ 0 Ġ&& Ġtarget Ġ> Ġsides [ mid Ġ- Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Closest ( mid Ġ- Ġ 1 , Ġmid , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĠRepeat Ġfor Ġleft Ġhalf Ġ*/ j Ġ= Ġmid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mid Ġ< Ġsides . size Ġ- Ġ 1 Ġ&& Ġtarget Ġ< Ġsides [ mid Ġ+ Ġ 1 ]) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġget Closest ( mid , Ġmid Ġ+ Ġ 1 , Ġtarget ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġmid Ġ+ Ġ 1 Ġ// Ġupdate Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġsingle Ġelement Ġleft Ġafter Ġsearch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmid ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMethod Ġto Ġcompare Ġwhich Ġone Ġis Ġthe Ġmore Ġclose ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġfind Ġthe Ġclosest Ġby Ġtaking Ġthe Ġdifference ĊĠĠĠĠĠĠĠ Ġ// Ġbetween Ġthe Ġtarget Ġand Ġboth Ġvalues . ĠIt Ġassumes ĊĠĠĠĠĠĠĠ Ġ// Ġthat Ġval 2 Ġis Ġgreater Ġthan Ġval 1 Ġand Ġtarget Ġlies ĊĠĠĠĠĠĠĠ Ġ// Ġbetween Ġthese Ġtwo . ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġget Closest ( index 1 : ĠInt , Ġindex 2 : ĠInt , Ġtarget : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( target Ġ- Ġsides [ index 1 ] Ġ>= Ġsides [ index 2 ] Ġ- Ġtarget ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġindex 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Localized Names ( context ) ĊĠĠĠ Ġ} Ċ }