package Ġcom . mr hs _ robot ics . robot lib . util Ċ Ċ import Ġkotlin . math . abs Ċ Ċ class ĠP ose 2 d ( var Ġx : ĠDouble , Ġvar Ġy : ĠDouble , Ġvar Ġheading : ĠDouble ) Ġ{ ĊĊ ĉ /** Ġ@ return Ġa Ġvector 2 d Ġcompri sed Ġof Ġthe Ġx Ġand Ġy Ġof Ġthe Ġvector Ġ( position ) Ċĉ Ġ*/ Ċ ĉ fun Ġpos (): ĠVector 2 d Ġ{ Ċĉ ĉ return ĠVector 2 d ( x , Ġy ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠAdds Ġtwo ĠPo ses Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġother ĠAnother ĠP ose Ċĉ Ġ* Ġ@ return Ġthe Ġsum Ġof Ġthe ĠPo ses Ċĉ Ġ*/ Ċ ĉ operator Ġfun Ġplus ( other : ĠP ose 2 d ): ĠP ose 2 d Ġ{ Ċĉ ĉ return ĠP ose 2 d ( x Ġ+ Ġother . x , Ġy Ġ+ Ġother . y , Ġheading Ġ+ Ġother . heading ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* ĠSubtract s Ġtwo ĠPo ses Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġother ĠAnother ĠP ose Ċĉ Ġ* Ġ@ return Ġthe Ġdiff rence Ġof Ġthe ĠPo ses Ċĉ Ġ*/ Ċ ĉ operator Ġfun Ġminus ( other : ĠP ose 2 d ): ĠP ose 2 d Ġ{ Ċĉ ĉ return ĠP ose 2 d ( x Ġ- Ġother . x , Ġy Ġ- Ġother . y , Ġheading Ġ- Ġother . heading ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġmulti pl ys Ġa ĠP ose Ġby Ġa Ġscalar Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġscalar ĠA Ġdouble Ġto Ġscale Ġthe Ġvector Ġby Ċĉ Ġ* Ġ@ return Ġa Ġscaled ĠP ose 2 d Ċĉ Ġ*/ Ċ ĉ operator Ġfun Ġtimes ( scalar : ĠDouble ): ĠP ose 2 d Ġ{ Ċĉ ĉ return ĠP ose 2 d ( x Ġ* Ġscalar , Ġy Ġ* Ġscalar , Ġheading Ġ* Ġscalar ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġdiv ides Ġa ĠP ose Ġby Ġa Ġscalar Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġscalar ĠA Ġdouble Ġto Ġscale Ġthe Ġvector Ġby Ċĉ Ġ* Ġ@ return Ġa Ġscaled ĠP ose 2 d Ċĉ Ġ*/ Ċ ĉ operator Ġfun Ġdiv ( scalar : ĠDouble ): ĠP ose 2 d Ġ{ Ċĉ ĉ return ĠP ose 2 d ( x Ġ/ Ġscalar , Ġy Ġ/ Ġscalar , Ġheading Ġ/ Ġscalar ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġneg ates Ġthe Ġvalues Ġof Ġthe Ġp so e Ċĉ Ġ* Ċĉ Ġ* Ġ@ return Ġa Ġneg ated ĠP ose 2 d Ċĉ Ġ*/ Ċ ĉ operator Ġfun Ġunary Minus (): ĠP ose 2 d Ġ{ Ċĉ ĉ return ĠP ose 2 d (- x , Ġ- y , Ġ- heading ) Ċ ĉ } ĊĊ ĉ /** Ġ@ return Ġthe ĠP ose Ġtranslated Ġinto Ġa Ġstring Ċĉ Ġ*/ Ċ ĉ override Ġfun ĠtoString (): ĠString Ġ{ Ċĉ ĉ return ĠString . format (" (% . 3 f , Ġ%. 3 f , Ġ%. 3 f Â° )", Ġx , Ġy , Ġheading ) Ċ ĉ } ĊĊ ĉ /** Ċĉ Ġ* Ġchecks Ġif Ġthe Ġpose Ġis Ġequ all Ġto Ġanother Ġpose Ċĉ Ġ* Ċĉ Ġ* Ġ@ param Ġother Ġanother Ġpose Ċĉ Ġ* Ġ@ return Ġtrue Ġor Ġfalse Ċĉ Ġ*/ Ċ ĉ override Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ Ċĉ ĉ return Ġif Ġ( other Ġis ĠP ose 2 d ) Ġ{ Ċĉĉ ĉ ( abs ( x Ġ- Ġother . x ) Ġ< Ġ 1 e - 4 Ċĉĉĉĉ ĉ && Ġabs ( y Ġ- Ġother . y ) Ġ< Ġ 1 e - 4 Ċĉĉĉĉ ĉ && Ġabs ( heading Ġ- Ġother . heading ) Ġ< Ġ 1 e - 4 ) Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ false Ċĉ ĉ } Ċ ĉ } Ċ }