package ĠCost Functions Ċ Ċ import ĠModels . Graph Edge Ċ import ĠUtilities . Geo Json Ċ import ĠUtilities . angle Between Ċ import ĠUtilities . to BigInteger Ċ import Ġorg . location tech . jts . geom . Polygon Ċ import Ġjava . math . BigInteger Ċ import Ġkotlin . math . absolute Value ĊĊ Ċ /** Ċ Ġ* Ġtarget Angle : ĠDouble Ġis Ġthe Ġangle Ġin Ġwhich Ġwill Ġgain Ġthe Ġhighest Ġa Star Cost . ĠThe Ġangle Ġis Ġdefined Ġin Ġrange Ġ 0 .. 3 6 0 Ġwhere Ċ Ġ* ĠEast Ġ= Ġ 0 Ċ Ġ* ĠSouth Ġ= Ġ 9 0 Ċ Ġ* ĠWest Ġ= Ġ 1 8 0 Ċ Ġ* ĠNorth Ġ= Ġ 2 7 0 Ċ Ġ*/ Ċ class ĠPolygon Angle d Cost ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġweight : ĠFloat , ĊĠĠĠĠĠĠĠ Ġgeo Json FilePath : ĠString , ĊĠĠĠĠĠĠĠ Ġval Ġmax Cost : ĠInt , ĊĠĠĠĠĠĠĠ Ġval Ġtarget Angle : ĠDouble , ĊĠĠĠĠĠĠĠ Ġval Ġmax Offset Degrees : ĠDouble Ġ= Ġ 1 8 0 . 0 , ĊĠĠĠĠĠĠĠ Ġval Ġf ading Cost : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠBase Polygon Cost Function Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġpolygon : ĠPolygon ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( weight Ġin Ġ 0 . 0 .. 1 . 0 ) Ġ{ Ġ" Weight Ġmust Ġbe Ġin Ġinclusive Ġrange Ġ 0 . 0 Ġto Ġ 1 . 0 " Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( target Angle Ġin Ġ 0 . 0 .. 3 6 0 . 0 ) Ġ{ Ġ" Angle Ġmust Ġbe Ġin Ġinclusive Ġrange Ġ 0 . 0 Ġto Ġ 3 6 0 . 0 " Ġ} ĊĠĠĠĠĠĠĠ Ġpolygon Ġ= ĠGeo Json . read Single Polygon Geo Json ( geo Json FilePath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Cost ( edge : ĠGraph Edge ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( edge . from Node Ġis Cover edBy Ġpolygon Ġ&& Ġedge . to Node Ġis Cover edBy Ġpolygon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġactual Angle Ġ= Ġedge . from Node . position Ġangle Between Ġedge . to Node . position ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġangle Diff Ġ= Ġ( actual Angle Ġ- Ġtarget Angle Ġ+ Ġ 1 8 0 Ġ+ Ġ 3 6 0 ) Ġ% Ġ 3 6 0 Ġ- Ġ 1 8 0 Ġ// https :// stackoverflow . com / questions / 1 2 2 3 4 5 7 4 / calcul ating - if - an - angle - is - between - two - angles ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! f ading Cost Ġ&& Ġ( angle Diff Ġ<= Ġmax Offset Degrees Ġ&& Ġangle Diff Ġ>= Ġ- max Offset Degrees )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( edge . distance Ġ* Ġmax Cost ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( f ading Cost Ġ&& Ġ( angle Diff Ġ<= Ġmax Offset Degrees Ġ&& Ġangle Diff Ġ>= Ġ- max Offset Degrees )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ( actual Angle Ġ- Ġtarget Angle ). absolute Value Ġ% Ġ 3 6 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoffset Factor Ġ= Ġ 1 Ġ- Ġ( offset Ġ/ Ġmax Offset Degrees ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( edge . distance Ġ* Ġmax Cost Ġ* Ġoffset Factor ). to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġ 0 L ĊĠĠĠ Ġ} Ċ }