package Ġcom . ala ers h ov . v room . datasource Ċ Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . sin Ċ Ċ class ĠSpeed DataSource ( ĊĠĠĠ Ġprivate Ġval Ġvalue Min : ĠDouble , ĊĠĠĠ Ġprivate Ġval Ġvalue Max : ĠDouble , ĊĠĠĠ Ġprivate Ġval Ġoffset : ĠDouble Ġ= Ġ 0 . 0 Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġget Speed ( time : ĠLong ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbig Period : ĠDouble Ġ= Ġ 1 0 . 0 Ġ* Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġsmall Period : ĠDouble Ġ= Ġbig Period Ġ/ Ġ 2 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġbig Ġ= Ġspeed Part ( time , Ġbig Period ) Ġ* Ġ 0 . 9 5 ĊĠĠĠĠĠĠĠ Ġval Ġsmall Ġ= Ġspeed Part ( time , Ġsmall Period ) Ġ* Ġ 0 . 0 5 ĊĊĠĠĠĠĠĠĠ Ġval Ġrange Ġ= Ġabs ( value Max Ġ- Ġvalue Min ) ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue Min Ġ+ Ġrange Ġ* Ġ( big Ġ+ Ġsmall ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġspeed Part ( time : ĠLong , Ġperiod : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfull Period Ġ= ĠMath . PI Ġ* Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġpart Of Period Ġ= Ġ( time Ġ+ Ġoffset ). rem ( period ) Ġ/ Ġperiod ĊĠĠĠĠĠĠĠ Ġreturn Ġ( sin ( part Of Period Ġ* Ġfull Period Ġ- ĠMath . PI Ġ/ Ġ 2 ) Ġ+ Ġ 1 ) Ġ/ Ġ 2 ĊĠĠĠ Ġ} Ċ } Ċ