package Ġorg . open rnd r . extra . noise Ċ Ċ import Ġorg . open rnd r . math . Vector 3 Ċ import Ġorg . open rnd r . math . mix Ċ Ċ fun Ġper lin Linear ( seed : ĠInt , Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ) Ġ= Ġper lin ( seed , Ġx , Ġy , Ġz , Ġ:: linear ) Ċ fun Ġper lin Qu int ic ( seed : ĠInt , Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ) Ġ= Ġper lin ( seed , Ġx , Ġy , Ġz , Ġ:: qu int ic ) Ċ fun Ġper lin H erm ite ( seed : ĠInt , Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble ) Ġ= Ġper lin ( seed , Ġx , Ġy , Ġz , Ġ:: her m ite ) Ċ Ċ fun Ġper lin Linear ( seed : ĠInt , Ġposition : ĠVector 3 ) Ġ= Ġper lin ( seed , Ġposition . x , Ġposition . y , Ġposition . z , Ġ:: linear ) Ċ fun Ġper lin Qu int ic ( seed : ĠInt , Ġposition : ĠVector 3 ) Ġ= Ġper lin ( seed , Ġposition . x , Ġposition . y , Ġposition . z , Ġ:: qu int ic ) Ċ fun Ġper lin H erm ite ( seed : ĠInt , Ġposition : ĠVector 3 ) Ġ= Ġper lin ( seed , Ġposition . x , Ġposition . y , Ġposition . z , Ġ:: her m ite ) Ċ Ċ inline Ġfun Ġper lin ( seed : ĠInt , Ġx : ĠDouble , Ġy : ĠDouble , Ġz : ĠDouble , Ġcross inline Ġinterpol ator : Ġ( Double ) Ġ-> ĠDouble Ġ= Ġ:: linear ): ĠDouble Ġ{ ĊĠĠĠ Ġval Ġx 0 Ġ= Ġx . fast Floor () ĊĠĠĠ Ġval Ġy 0 Ġ= Ġy . fast Floor () ĊĠĠĠ Ġval Ġz 0 Ġ= Ġz . fast Floor () ĊĠĠĠ Ġval Ġx 1 Ġ= Ġx 0 Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġy 1 Ġ= Ġy 0 Ġ+ Ġ 1 ĊĠĠĠ Ġval Ġz 1 Ġ= Ġz 0 Ġ+ Ġ 1 ĊĊĠĠĠ Ġval Ġxs : ĠDouble Ġ= Ġinterpol ator ( x Ġ- Ġx 0 ) ĊĠĠĠ Ġval Ġys : ĠDouble Ġ= Ġinterpol ator ( y Ġ- Ġy 0 ) ĊĠĠĠ Ġval Ġz s : ĠDouble Ġ= Ġinterpol ator ( z Ġ- Ġz 0 ) ĊĊĠĠĠ Ġval Ġx d 0 Ġ= Ġx Ġ- Ġx 0 ĊĠĠĠ Ġval Ġy d 0 Ġ= Ġy Ġ- Ġy 0 ĊĠĠĠ Ġval Ġz d 0 Ġ= Ġz Ġ- Ġz 0 ĊĠĠĠ Ġval Ġx d 1 Ġ= Ġx d 0 Ġ- Ġ 1 ĊĠĠĠ Ġval Ġy d 1 Ġ= Ġy d 0 Ġ- Ġ 1 ĊĠĠĠ Ġval Ġz d 1 Ġ= Ġz d 0 Ġ- Ġ 1 ĊĊĠĠĠ Ġval Ġxf 0 0 Ġ= Ġmix ( grad Coord 3 D ( seed , Ġx 0 , Ġy 0 , Ġz 0 , Ġx d 0 , Ġy d 0 , Ġz d 0 ), Ġgrad Coord 3 D ( seed , Ġx 1 , Ġy 0 , Ġz 0 , Ġx d 1 , Ġy d 0 , Ġz d 0 ), Ġxs ) ĊĠĠĠ Ġval Ġxf 1 0 Ġ= Ġmix ( grad Coord 3 D ( seed , Ġx 0 , Ġy 1 , Ġz 0 , Ġx d 0 , Ġy d 1 , Ġz d 0 ), Ġgrad Coord 3 D ( seed , Ġx 1 , Ġy 1 , Ġz 0 , Ġx d 1 , Ġy d 1 , Ġz d 0 ), Ġxs ) ĊĠĠĠ Ġval Ġxf 0 1 Ġ= Ġmix ( grad Coord 3 D ( seed , Ġx 0 , Ġy 0 , Ġz 1 , Ġx d 0 , Ġy d 0 , Ġz d 1 ), Ġgrad Coord 3 D ( seed , Ġx 1 , Ġy 0 , Ġz 1 , Ġx d 1 , Ġy d 0 , Ġz d 1 ), Ġxs ) ĊĠĠĠ Ġval Ġxf 1 1 Ġ= Ġmix ( grad Coord 3 D ( seed , Ġx 0 , Ġy 1 , Ġz 1 , Ġx d 0 , Ġy d 1 , Ġz d 1 ), Ġgrad Coord 3 D ( seed , Ġx 1 , Ġy 1 , Ġz 1 , Ġx d 1 , Ġy d 1 , Ġz d 1 ), Ġxs ) ĊĊĠĠĠ Ġval Ġy f 0 Ġ= Ġmix ( xf 0 0 , Ġxf 1 0 , Ġys ) ĊĠĠĠ Ġval Ġy f 1 Ġ= Ġmix ( xf 0 1 , Ġxf 1 1 , Ġys ) ĊĊĠĠĠ Ġreturn Ġmix ( yf 0 , Ġy f 1 , Ġz s ) Ċ }