Current section

Files

Jump to
noise src noise_simplex.erl
Raw

src/noise_simplex.erl

-module(noise_simplex).
-define(LutMask, 127).
-define(F2, 0.5).
-define(G2, 0.25).
-define(Grad2D, {
{0.465254262011416, -0.885177084927198},
{0.999814701091156, -0.0192500255065206},
{0.562013227349949, 0.827128244157878},
{0.540531763173497, -0.841323607775599},
{-0.97869393624958, 0.20532457024989},
{-0.022259068317433, 0.999752236245381},
{-0.763453105361241, -0.645863264100288},
{-0.877652307360767, 0.479297848299283},
{-0.429945697678765, 0.902854748587789},
{-0.880336026899474, 0.474350587374832},
{-0.999734062007074, 0.0230609033395389},
{0.961877124516138, -0.273481987217745},
{0.485111864938318, 0.874452101887844},
{-0.307899752943979, 0.951418804805243},
{-0.991765219175154, 0.128069317303008},
{0.937814305853532, -0.347137332674633},
{-0.398552509901734, -0.917145515635893},
{0.701222178891205, -0.712942813857514},
{0.873193936119955, 0.487372906431349},
{-0.514304676201594, -0.857607544298191},
{0.0428414754286589, 0.999081882521696},
{-0.88038067821201, 0.474267710719338},
{0.14177264550869, 0.989899245875795},
{-0.887664663265946, -0.46049044027966},
{0.999983713358517, -0.00570727760945115},
{-0.623600504016441, -0.781743187620104},
{0.888019464508127, -0.459805861918592},
{0.600087177175954, -0.79993460969569},
{-0.560441030370991, 0.828194331951567},
{0.958552181052623, -0.284917033887514},
{0.6683586377581, 0.743839183785136},
{0.709718808827001, 0.704485068966819},
{0.695776987881928, 0.718257880662615},
{0.154316110318401, -0.988021527142096},
{-0.725364342269412, -0.688365143629501},
{-0.999918869545931, 0.0127379090116007},
{0.805508244111792, 0.592584566680519},
{-0.996506623245929, 0.0835137702836865},
{-0.73969279786535, -0.67294469667732},
{0.695504007775371, -0.718522216196824},
{-0.999983227160896, 0.00579183881678425},
{-0.714924640549655, 0.699201514825981},
{-0.835103934916504, -0.550092190352645},
{0.84959050330652, 0.527442865807639},
{-0.171610706906682, 0.985164841676249},
{0.3561994988697, 0.934409929851441},
{-0.409182557485348, -0.912452538299801},
{0.463529807851185, 0.886081326534672},
{-0.962925769084928, -0.269766497608949},
{0.744285209959416, 0.66786190656128},
{-0.691027420259623, 0.722828544296177},
{0.981612661017864, 0.190883691627725},
{0.928340009081787, 0.371732198683444},
{-0.120562843572988, 0.992705696946278},
{0.789437446513116, -0.61383101749818},
{0.999774655712189, -0.0212282310985648},
{-0.902267580211854, 0.431176545858708},
{-0.912180652347305, -0.4097883081339},
{-0.770294485489921, -0.637688329533965},
{0.20063205075057, 0.979666667908846},
{-0.982785937329741, -0.184747940142514},
{0.857295252061123, -0.514825068147866},
{-0.6880675701609, -0.725646621223357},
{0.703885918434739, -0.710313039320893},
{0.80736694412922, -0.590049673779628},
{0.501306939228223, -0.865269526033149},
{0.994382489412099, -0.105846420584718},
{0.496494368044017, -0.868039942917705},
{0.077642279257408, -0.996981281906393},
{0.951970808735996, -0.30618879684687},
{-0.761381916275718, -0.648303615267041},
{0.925704511866975, 0.378247480770363},
{0.307462004306155, 0.951560358520699},
{-0.722833511616144, -0.6910222243059},
{0.365487416741135, -0.930816280585966},
{-0.452581511359919, 0.891723037481466},
{-0.696052038963733, -0.717991336336609},
{-0.731589205376628, -0.681745725748533},
{-0.584030912612065, 0.811731416857521},
{-0.622817071437575, -0.782367493909303},
{-0.250124556053565, -0.968213667771224},
{-0.972374793807189, -0.233425063710878},
{-0.970811073944879, 0.239845489234194},
{0.972096169972212, -0.234582685476477},
{-0.56398693111627, -0.825783713529185},
{-0.697050386134155, 0.717022146931478},
{-0.0346220968223854, -0.999400475490992},
{-0.218763172462792, -0.975777984161364},
{-0.526228595935678, 0.850343145335791},
{0.878475471267297, 0.477787448957902},
{-0.543258510315468, 0.839565477476188},
{-0.424638392098636, 0.905363040970795},
{-0.511241626148254, -0.859437024855975},
{0.310536598007565, -0.950561424263518},
{0.647207900842245, 0.762313539881967},
{-0.998374197564832, 0.0569996634795082},
{-0.384499699032222, 0.923125116895933},
{0.793017652527103, -0.609198656252953},
{-0.108016962369769, 0.994149051118799},
{-0.931126682943364, 0.364695901143526},
{-0.801286360381044, -0.598281011454734},
{0.875902620980454, -0.482487925817394},
{-0.731473336626206, 0.681870044660216},
{-0.315759562725525, -0.948839237461956},
{-0.0770741115938651, -0.997025366438596},
{-0.822418334736048, 0.568883188967635},
{-0.998852401248829, -0.0478944727442276},
{0.996841343178929, -0.0794187416749304},
{-0.632437179039341, 0.774611654036241},
{0.719989390873874, 0.693985069745068},
{0.99256596306396, -0.121707883750037},
{0.851153933233715, -0.524916166583558},
{0.952866133004913, 0.303391055524489},
{0.983070281370671, 0.183228878416556},
{0.751614346163695, 0.659602815822462},
{0.549915829679874, 0.83522007894177},
{0.529779603383605, 0.8481353499523},
{-0.738299650910558, -0.67447285005799},
{-0.888225309084572, -0.459408097775406},
{0.69138401830353, 0.722487466489534},
{0.895582660271765, -0.4448951546382},
{-0.823764839572624, -0.566931644101728},
{0.481527438369519, 0.876431016165727},
{-0.393245292146023, 0.9194335974963},
{0.511430719572624, 0.859324513252955},
{0.709782009015835, 0.704421393540433},
{-0.123429256704187, -0.992353373848979},
{-0.796333188996483, -0.60485820826264}
}).
-define(F3, 1 / 3).
-define(G3, 1 / 6).
-define(Grad3D, {
{0.969192790963703, -0.204588387787502, -0.137145636191962},
{0.0105050866706296, 0.869235070511719, -0.494287401565657},
{-0.00713466534361336, -0.0561560433951495, -0.998396512083569},
{-0.99998707996014, 0.00085789886042815, 0.00501038145637507},
{-0.729044421579981, -0.0724223391156089, 0.680624151907743},
{-0.769477416524206, 0.638612501748049, 0.00886442724220208},
{-0.148489274637499, -0.733777362959066, 0.662964340614538},
{0.00192647521945516, -0.688227670545063, 0.725492220626345},
{0.307853961011481, -0.888296843306306, 0.340814695782903},
{-0.136873983993337, 0.99058218544213, 0.0035279442294635},
{0.981422965662359, 0.0873011939299262, -0.170843390299155},
{0.977985182924792, 0.0274298762917452, 0.206863684261352},
{-4.10904184278805E-08, -0.984715746607902, -0.174169165992265},
{-0.00576047279073815, -0.00207046110763061, 0.999981264896512},
{0.385796494451913, -0.382885124111844, 0.839380751865608},
{0.196898025871543, -0.533803208609833, 0.822365674068256},
{-0.953574229510659, -0.197141111727736, -0.227665480211439},
{0.958192898763756, -0.00565943080050262, 0.286067019423289},
{-0.000021414243574488, 0.308183457620683, 0.951326944846192},
{-0.00156590253858546, -0.936777289401244, -0.349922645753741},
{0.010162930999189, 0.907036729301754, 0.420928837846829},
{-0.0468274165634939, 0.74026530347444, -0.670682095727837},
{-0.958782958606567, 0.0676203469753538, -0.275975953591197},
{0.000771226398681087, -0.963152702156633, 0.268954043543163},
{-0.939601847652347, 0.341933173840782, -0.0151681414637957},
{0.0836248033533964, 0.431468628956066, 0.898243683245743},
{-0.97637082132863, 0.118948680332271, 0.180419596234078},
{0.103518422502263, 0.000465187240855595, -0.994627427634827},
{-0.141353740004181, 0.0778654829014707, -0.98689213532146},
{0.0700630230682292, 0.912644877864809, -0.402703985212052},
{0.991874945122624, -0.0502217417385342, 0.116884001876814},
{-0.707119760481927, 0.700142261026601, -0.0989063125414175},
{0.0976913606831578, 0.99518571412564, -0.00786081726752686},
{0.865756754070504, 0.268594575188625, 0.422282129577546},
{0.0124864728918991, -0.922679395826772, -0.385365826859963},
{-0.0174011080646746, -0.984212730893662, 0.176132057800279},
{0.983085383617433, 0.183144250425653, 0.00114544916535278},
{0.84177325324929, -0.000849099388075524, 0.539830593005191},
{-0.773202768542597, 0.634158480426922, -0.000707404184135718},
{-0.399463762408861, 0.520122522942901, -0.754918050949683},
{-0.0543404007696243, 0.853240000077495, -0.51867969221086},
{0.0787561128671418, -0.0445112338899157, -0.995899706167069},
{-0.149110911377271, -0.855893524471146, -0.495189065788614},
{0.128579845943545, 0.95447163354276, 0.26916746456314},
{-6.48712081276198E-06, -0.417292224145094, 0.908772358528778},
{-0.18395289837094, 0.967255425062472, 0.174866445804071},
{-0.0956465003848313, -0.995413983868259, -0.00165761384418054},
{-0.493402767926647, 0.252656257103973, 0.83229713705415},
{0.941743815026262, -0.00313821941824732, 0.336316426061328},
{-0.406002839825049, -0.660621950516609, -0.631458892208849},
{-0.0151930656231186, 0.000118750826499392, 0.999884571665756},
{0.681786958463344, -0.719431781259153, 0.132606392695014},
{0.973323591185432, -0.228922756390528, 0.0153479134887209},
{-0.810634856852843, -0.585551171144037, 0.000977152504195713},
{-0.181398855060402, -0.831693356111209, 0.524767202465292},
{-0.733900500867695, 0.679256981569713, 8.84021970721802E-05},
{0.271727663466327, -0.889119678670303, -0.368280156821335},
{0.298233653375395, -0.0312311598898426, -0.953981814630813},
{-0.752318728102205, -0.00392703305301813, 0.658787605953604},
{0.00665991896444102, -0.893539727653096, 0.448934739784101},
{-0.17274029679022, 0.981849574845414, 0.0783083791219516},
{0.740984319707759, -1.24163939998686E-09, 0.671522328703395},
{-0.91345982474963, 0.00101800775270491, 0.40692764986984},
{0.166118424599226, -0.966950978532905, -0.193417874362556},
{-0.371630916510155, 0.92837704130171, -0.00255559732836468},
{0.114876798169617, 0.991537470331245, 0.0604712011738797},
{0.42509283827761, -0.861877415693766, -0.276520160498508},
{0.0914177278602429, 0.937282941514681, 0.336368081985282},
{-0.138897098096673, 0.574329772420649, -0.806754552916541},
{4.20730659972853E-05, -0.973522779481066, 0.228590017413966},
{-0.19883302527571, -0.769560727972852, -0.606829229702725},
{0.0747279815185906, 0.375429090417211, 0.92383371168553},
{0.0360592551928224, 0.999349653582228, 1.40580077597545E-07},
{-0.630789398266975, 0.775912761477526, 0.00800759703705387},
{0.999468273136104, 0.0122075383077114, -0.0302348640281232},
{0.0234858830298487, 0.722121551769761, -0.691367397096465},
{0.044647769484317, -0.998966611124733, -0.00850214902496602},
{-0.155624581702642, 0.0567240593672596, -0.98618627584183},
{-0.564856042306962, 0.825189463979779, 2.46592673497201E-06},
{-0.00280893077197093, -0.849678682544325, 0.527293320968186},
{0.85760478967376, 0.0912484314080345, -0.506149926893406},
{-0.983676972673489, -0.138789081908023, -0.11453036355067},
{-0.995791780173427, 0.0916344946719056, 0.00136011957614869},
{0.0705163298667096, 0.9883873876068, -0.134602448870495},
{0.151288867759186, -0.946777269461834, -0.28412053871999},
{-0.479182164834798, 2.28582795501955E-06, 0.877715473772117},
{-0.920617168247744, -0.0874211800038508, -0.380554288918466},
{0.647008224881357, -0.0116892424293656, -0.76239341454875},
{0.00348600295131339, 0.00264876419739902, 0.999990415869897},
{0.293662611616922, 0.774229458412962, -0.560652313170918},
{-0.0230822002633608, -0.133701316157593, -0.99075282996756},
{0.0891587773276397, -0.70303221860981, -0.705546888606285},
{-0.716380181025389, -0.675240051032385, 0.175642562369752},
{-0.110229513550145, -0.0380431704478986, 0.993177814655951},
{0.901899360101853, -0.423583957873496, -0.0845823556073773},
{-0.188144760211676, 0.981876973408649, 0.0227850454193412},
{-0.992971049488398, -0.00105311622549315, -0.118352802350111},
{0.974825103742426, -0.22297088847484, 2.51166485428216E-06},
{0.917736330268161, 0.253456586759036, -0.305810050087285},
{0.754361752313554, 0.655909079393725, -0.0268631013715986},
{-0.00493426945610691, 0.999852337890823, -0.0164607229243032},
{0.172163344055272, 0.977404359568319, -0.122639719750783},
{0.20654798485596, 0.00802290795582379, 0.978403578744413},
{-0.0189935909416278, -0.956252765802595, -0.291924461801387},
{-0.298030174309119, -0.101625749247146, -0.949131298762838},
{-0.525057139557522, -0.851050276233871, 0.00533174661105069},
{0.00362214069523366, 0.401488407244411, -0.915856942401558},
{0.7517944143271, 0.19472711592481, 0.629989292694866},
{0.501284099317453, -0.0225214021165674, 0.864989617404853},
{-0.985033512468648, 0.1680612553394, -0.0382673982316817},
{0.00137633273570574, -0.0442369494900767, -0.999020118920542},
{-0.724166817672979, -0.688818418185576, 0.033340770082758},
{-0.0128146550963728, -0.0397993929245446, 0.99912551410601},
{0.802033957950016, 0.595775400910827, -0.0423462154693413},
{-0.902335114745471, -0.411652900762455, -0.127801525777801},
{7.40750655087705E-05, -0.890177016591854, 0.455614830360591},
{-0.0563694832642116, 0.998393830705426, -0.00567804243293261},
{0.804825783463094, 0.0873894235068948, -0.587042202002675},
{0.902405167679558, 0.0887442050097385, -0.421650778989461},
{0.0138828478418606, -0.26021714739708, 0.965450310858268},
{-0.0235002961872274, -0.1428517727679, -0.989465061079056},
{0.543378228613975, 0.00830368325812741, 0.839446930730399},
{-0.956960500295924, 0.0113747804839107, 0.289995198653906},
{-0.00858337504492301, -0.949962410388146, -0.312246288244364},
{-0.731827611403257, 0.00140870300297461, -0.681488343806152},
{0.844453636307317, 0.498643416559842, -0.195583228444764},
{-0.997648624781726, 0.000128342870118087, -0.0685361583343983},
{0.00700544496566235, -0.020878882722484, 0.999757468587804}
}).
-define(F4, (math:sqrt(5.0) - 1.0) / 4.0).
-define(G4, (5.0 - math:sqrt(5.0)) / 20.0).
-define(Grad4D, {
{0.0179285344989033,0.0677944464204167,
0.900387877028038,0.429399757319696},
{0.151459767976519,0.41940331430838,
0.025942750707592,-0.894699822464143},
{0.979529859361997,0.130367466451577,
-0.00937681736873056,-0.153093610595927},
{0.0188035720634411,0.957989228554963,
-0.269676405489343,0.0958003130092474},
{-0.0012369876892,-7.87528807201163E-05,
0.000149907955282427,-0.999999220593219},
{-0.0515998001407824,-0.944373511413844,
0.324801510463498,0.000332213707707317},
{0.0625583127110917,0.368853467530968,
0.927379950072298,7.21458539681357E-05},
{-0.0332301888025581,0.00487951365898265,
-0.999435388671684,0.000921286751161818},
{0.254162385940239,-0.00247502010266267,
0.000438725101563024,0.967158292819196},
{-0.759302539566954,-0.650633735433763,
-0.0116359665914368,2.04111122123566E-06},
{-4.48759951174869E-08,0.358287711147997,
-0.933611212169481,0.000143358851029576},
{-0.834876133401752,-0.194359576306317,
-0.0344898444893627,-0.513825503066234},
{0.992418907081551,4.57210674843702E-06,
-1.83490711870738E-06,0.122901232063752},
{-0.42938540950326,0.513195588850885,
-0.743126271370401,-0.00466931352956133},
{0.570845731350832,1.65553932296542E-05,
0.0011349034293071,0.821056552692115},
{2.31617888342864E-05,0.994847097173254,
-0.0961577881592109,-0.0321392670390731},
{0.0285107567449309,-0.0502599346018885,
-0.998329141978559,2.92045363529652E-10},
{0.693061667730217,0.081528197183571,
-0.606560258101509,0.380924311483053},
{-0.471772182045896,-0.105811692623359,
0.875348441445287,3.33769803143138E-06},
{0.362766768879719,0.923039277394957,
-0.128057658031582,-1.49328116922925E-06},
{0.062046368142898,-0.815075843570167,
0.576022235980786,-3.29295020122024E-05},
{-0.921787687217261,0.28869133264405,
0.0732935586853114,-0.248179024911652},
{-5.47319853185622E-06,0.973767617716296,
0.225257152279963,-0.0321844994352065},
{0.232218374389583,-0.08472237319722,
-0.137241903519584,0.95919831421558},
{-0.0167570140621457,0.358790865544362,
0.933267510677344,0.000266074731502954},
{0.0107254303176227,-0.737658920753904,
1.52650004111161E-06,-0.675088351087735},
{-3.71325911057143E-06,-0.448149367809768,
0.893952928186452,0.00321034340618395},
{-0.0163066755437812,-0.0444639669567192,
-0.998877894427004,-5.06860474025719E-07},
{0.085934337625112,-8.88863502634554E-05,
0.996300798791311,6.62916977146475E-06},
{0.018848679157187,-0.168704308520019,
0.583111361978302,0.794458761115151},
{-0.14092365680382,-0.0262056616259223,
0.00425806403039333,-0.989664415416913},
{0.000019585584043321,0.0708482693257697,
0.094787939700978,0.992973196434421},
{-3.61195284939247E-07,0.573786610288797,
-0.00565371182001549,-0.818985324285984},
{0.555482972457819,-0.831524637330389,
0.00233255322693632,6.33832316941843E-05},
{0.800371000342067,0.168341324992158,
8.13736079413595E-08,-0.575384619286367},
{-0.151943784159287,-3.17003100215728E-06,
-0.973809705113584,0.169138241305451},
{-3.28617107642979E-10,-2.51664008452886E-05,
-0.999999889743206,0.000468913880721174},
{0.144708070244843,-0.392246876333683,
-0.14750809340107,0.896350001279446},
{-0.499891693213082,0.000469340668710032,
-0.0432191264563471,0.865008775611117},
{-0.74530243187983,-0.0130445109718722,
0.0435702095816092,0.665173483088833},
{-0.796157099668477,0.000124118278989671,
-0.00217167212139707,-0.605086060889134},
{0.947484791701284,0.0724121319093247,
3.87510235633725E-05,-0.311494865359736},
{0.999997268027888,-0.00183696890994059,
0.00144542293102575,0.000015314536027456},
{0.246103794412299,0.967730041656212,
0.05414322404818,-1.18997457774053E-05},
{4.28260722805506E-05,-0.999999938144512,
-0.00024875421527231,-0.000244945380014729},
{0.345932094721763,-0.00182445228148537,
-2.01050360940934E-07,0.938257777593794},
{0.232629530802398,-0.0123421039259699,
-0.000333195046776704,-0.972487050222468},
{-0.0413343034477463,-0.845558019383741,
-0.532041468453896,0.0159683142427982},
{4.876953380543E-11,-0.509395810571092,
-0.760866765012863,-0.401992131852703},
{0.01457871782159,0.00352273519283274,
2.46006626805202E-08,0.999887519335769},
{-0.2197566484112,-0.269663250455668,
0.936190779005179,-0.0503544649304871},
{-0.0865455281910523,0.0990053597028644,
-2.66646365439371E-05,0.991316200608683},
{-0.989058271919771,-0.130356511156493,
-0.0535910970499983,-0.0435764737348075},
{0.900013078389142,-0.00043287841542218,
-2.83509325586139E-08,-0.435862674869937},
{-0.771015568252326,-4.76900694356318E-05,
-0.0219363831312084,0.636438360199416},
{-0.078643371273305,0.996901923608738,
-6.16073674743889E-06,0.00133222446022512},
{5.20470758906282E-05,0.997256243992129,
0.0740268623204818,6.90275154123082E-05},
{-0.115896931950432,-0.300911764975683,
0.431409257232567,-0.842559234497932},
{-1.05936323695781E-10,-0.0143409648185513,
-0.999897162703251,2.73141203266667E-05},
{7.36602805763734E-06,0.0490840386576873,
-0.187410880606716,0.981054493351418},
{-0.149217229776082,0.096219097342591,
0.984104045608208,-0.00391549001869267},
{0.0301779956805262,-2.03984355987402E-05,
-0.999544181133284,-0.00084742150235282},
{0.101389753295397,0.00105726742868962,
0.994846219323528,3.15683454673068E-06},
{-0.0132313717977117,0.159525525289995,
0.593084588401323,-0.789067302948319},
{-0.999950751279126,-2.28154321862005E-06,
-3.35621991002035E-07,0.00992446527495385},
{-0.446140024906362,-0.89496104730281,
-0.000949959838625011,-0.00170281047488805},
{-0.25830870420065,-5.99271603499866E-11,
-0.962897969373127,-0.0781288289384209},
{-0.0141578535996954,-0.590108238154547,
0.772903767582682,-0.232790868592566},
{-0.0408946388040428,-0.487869969082088,
-2.38283754617856E-06,-0.871957866974805},
{0.993390567418713,0.114783068234581,
0.000166763855068009,-7.22479963187292E-13},
{-0.150270957910884,0.98861713652712,
0.00724343322227505,0.00152618760893165},
{-0.0292187624948691,0.984282454781429,
-2.54315254401317E-06,-0.174167485832589},
{0.605498435491149,0.0295366828327539,
-0.261172160527168,0.75119127494306},
{-0.00453574210785455,0.0164722766698647,
-0.00759597400463439,-0.99982518088102},
{-0.161906996023123,-0.968938255461586,
0.00479280806368259,0.186873782892868},
{0.0718297493332595,-0.15117444225596,
-0.95710224645937,0.236520749495151},
{1.55364291766971E-08,0.751515349174519,
-0.513260578427611,-0.414473471512055},
{-0.0832231266679871,-0.016036973751982,
-0.150197717417989,0.985016432524305},
{-0.0499060179903397,0.113056945464528,
0.760889993198006,0.637003873380466},
{-0.912217939109183,-0.000236556733323175,
0.409698193304452,-0.00240125204303045},
{-0.0201341577237124,0.822200561754789,
-0.0353638581788924,-0.567741357906546},
{0.981833737365851,-0.189743278357464,
1.93574210616191E-05,1.06610391592544E-05},
{-3.1713467661518E-06,-0.999998467923194,
-3.10580174237511E-07,-0.00175046882587876},
{0.999785072721677,0.00661572799000603,
-0.000560396757787285,-0.0196399201003463},
{0.947369318875243,0.10413625625988,
0.014573335884325,0.302381599419074},
{0.000539050555161111,0.363169172188698,
-0.0860769990608411,0.927738439447755},
{0.0218600193860152,0.0136508664574171,
-0.957380820600311,0.287676481040908},
{0.0452753695684423,-3.62412965753121E-05,
0.412640274130687,-0.909768181331025},
{-6.91937018588465E-08,0.000924049891480408,
-0.998173949198153,0.0603979575313267},
{0.0524759516860929,0.0348710315338021,
-0.997989141515491,-0.00692524884613554},
{-0.000620065691267785,-0.297909553995998,
-0.954593871695887,-0.000230818326052339},
{-6.96674135940915E-05,-0.867754661790055,
0.496992798829057,3.74443548432658E-07},
{-0.0482481401493802,0.00489619615662811,
-0.995799001490995,0.0776691242699415},
{-0.151673443794422,-0.974774864011805,
-0.000484445743305936,-0.163734224432859},
{-0.049803009786826,0.0811460037036778,
-0.0626532599996605,-0.993483545566061},
{-0.0609700565049769,0.169557563496092,
0.340322391745786,0.922883283274476},
{-0.907810279284789,-9.09566645872125E-05,
-6.82944907490262E-07,-0.419381077960479},
{-0.0974613227620325,0.995239313157134,
5.15261588579082E-11,-1.05825987794001E-05},
{-0.0186861500087666,0.00438118107716855,
0.992023504204221,-0.124583306091132},
{-0.930838673636572,-0.0110467691436416,
-0.00188202425659556,0.365258525620815},
{-0.0567494686643164,-2.42763994429726E-09,
0.975143948519116,-0.214181645975711},
{0.0304023604642125,-0.632969000014441,
0.773579295645911,0.00100739609776072},
{0.000108520483850958,0.0583209179359306,
-0.00851497409325953,-0.998261565908758},
{-0.02385578591046,-0.129946314819517,
0.0562422070557562,-0.989637141021354},
{-0.00504915323521923,-0.0089236566539032,
-0.000176312774898594,0.999947420276354},
{9.54792136888334E-10,0.95741607332861,
-0.000200174641238177,0.288711659726688},
{0.994168345296552,0.107836831627415,
0.000720385221359334,1.00702166459814E-07},
{-0.442903722280488,0.0490533033131452,
-0.286717020869704,0.848070407553381},
{-0.579123085419419,0.000412386634095739,
0.000548850089152674,-0.81523983013291},
{-0.99748331906203,-0.00315622682426633,
-0.0314712268933373,-0.0634557192304806},
{-0.999910167988914,0.00277348539595252,
-0.0131131747511067,-9.15373542722021E-05},
{0.989849756616008,-0.102100397263962,
-0.0925741321036343,-0.0346842654676267},
{-0.0502665295186573,-0.0019502335925594,
0.995313667448867,-0.0825843568030342},
{-0.775008311628356,0.00458914577239442,
0.631802950284916,0.012887538916389},
{-0.917122758231958,3.16141922995542E-09,
0.00144102092010558,-0.398602270178826},
{0.298077607094876,0.0476089996782551,
0.875582290533107,0.377145563149066},
{0.263407146338272,-0.473950966620194,
0.840230003541957,-0.000835251815231092},
{-0.55558964464076,0.00104388539977359,
-0.000884120434714965,-0.831455516189702},
{0.857295578944858,-0.0176694994052872,
-0.51054240707814,-0.0638633673339165},
{0.0864515147611175,-0.35114135064002,
0.922138824225689,0.137425893927874},
{0.968780126999011,0.203315714499582,
-0.141786558529076,-0.00493534089860906},
{-0.0103473943005527,-0.0446849068409796,
-0.625161129502578,-0.779146810742919},
{-0.810284066914716,-0.582923322911606,
-0.0599165375134594,0.00708089275712812},
{-0.914614581816782,0.366353079295109,
0.00173954895166334,-0.171063035131932},
{-0.0017333110902601,0.0325427046350465,
-0.999147497892685,0.0253425622715693},
{0.000847670819166468,0.0188099412466175,
0.999636928304481,0.019273793982079},
{0.100715508011326,0.994914522159042,
-0.000565737742910064,0.00107702547448881},
{-0.414687299306508,-0.734201866849646,
-0.536852323837964,-0.0277784970462061}
}).
-define(Simplex4D, {
{0,1,2,3}, {0,1,3,2}, {0,0,0,0}, {0,2,3,1}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0},
{1,2,3,0}, {0,2,1,3}, {0,0,0,0}, {0,3,1,2}, {0,3,2,1}, {0,0,0,0}, {0,0,0,0},
{0,0,0,0}, {1,3,2,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0},
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {1,2,0,3}, {0,0,0,0}, {1,3,0,2}, {0,0,0,0},
{0,0,0,0}, {0,0,0,0}, {2,3,0,1}, {2,3,1,0}, {1,0,2,3}, {1,0,3,2}, {0,0,0,0},
{0,0,0,0}, {0,0,0,0}, {2,0,3,1}, {0,0,0,0}, {2,1,3,0}, {0,0,0,0}, {0,0,0,0},
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {2,0,1,3},
{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {3,0,1,2}, {3,0,2,1}, {0,0,0,0}, {3,1,2,0},
{2,1,0,3}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {3,1,0,2}, {0,0,0,0}, {3,2,0,1},
{3,2,1,0}
}).
%% API exports
-export([raw/2]).
%%====================================================================
%% API functions
%%====================================================================
raw(Seed, {X, Y}) ->
T = (X + Y) * ?F2,
{I, J} = {trunc(X + T), trunc(Y + T)},
TT = (I + J) * ?G2,
{X0, Y0} = {X - (I - TT), Y - (I - TT)},
{I1, J1} = if X0 > Y0 -> {1, 0}; true -> {0, 1} end,
{X1, Y1} = {X0 - I1 + ?G2, Y0 - J1 + ?G2},
{X2, Y2} = {X0 - 1.0 + 2.0 * ?G2, Y0 - 1.0 + 2.0 * ?G2},
T0 = 0.6 - X0 * X0 - Y0 * Y0,
N0 = if
T0 < 0 -> 0.0;
true -> math:pow(T0, 4) * dot(gcoord(Seed, {I, J}), {X0, Y0})
end,
T1 = 0.6 - X1 * X1 - Y1 * Y1,
N1 = if
T1 < 0 -> 0.0;
true -> math:pow(T1, 4) * dot(gcoord(Seed, {I + I1, J + J1}), {X1, Y1})
end,
T2 = 0.6 - X2 * X2 - Y2 * Y2,
N2 = if
T2 < 0 -> 0.0;
true -> math:pow(T2, 4) * dot(gcoord(Seed, {I + 1, J + 1}), {X2, Y2})
end,
27.7 * (N0 + N1 + N2);
raw(Seed, {X, Y, Z}) ->
T = (X + Y + Z) * ?F3,
{I, J, K} = {trunc(X + T), trunc(Y + T), trunc(Z + T)},
TT = (I + J + K) * ?G3,
{X0, Y0, Z0} = {X - (I - TT), Y - (J - TT), Z - (K - TT)},
{I1, J1, K1, I2, J2, K2} = if
X0 >= Y0 -> if
Y0 >= Z0 -> {1, 0, 0, 1, 1, 0};
X0 >= Z0 -> {1, 0, 0, 1, 0, 1};
true -> {0, 0, 1, 1, 0, 1}
end;
Y0 < Z0 -> {0, 0, 1, 0, 1, 1};
X0 < Z0 -> {0, 1, 0, 0, 1, 1};
true -> {0, 1, 0, 1, 1, 0}
end,
{X1, Y1, Z1} = {X0 - I1 + ?G3, Y0 - J1 + ?G3, Z0 - K1 + ?G3},
X2 = X0 - I2 + 2.0 * ?G3,
Y2 = Y0 - J2 + 2.0 * ?G3,
Z2 = Z0 - K2 + 2.0 * ?G3,
X3 = X0 - 1.0 + 3.0 * ?G3,
Y3 = Y0 - 1.0 + 3.0 * ?G3,
Z3 = Z0 - 1.0 + 3.0 * ?G3,
T0 = 0.6 - X0 * X0 - Y0 * Y0 - Z0 * Z0,
N0 = if
T0 < 0 -> 0.0;
true -> math:pow(T0, 4) * dot(gcoord(Seed, {I, J, K}), {X0, Y0, Z0})
end,
T1 = 0.6 - X1 * X1 - Y1 * Y1 - Z1 * Z1,
N1 = if
T1 < 0 -> 0.0;
true -> math:pow(T1, 4) * dot(
gcoord(Seed, {I + I1, J + J1, K + K1}),
{X1, Y1, Z1}
)
end,
T2 = 0.6 - X2 * X2 - Y2 * Y2 - Z2 * Z2,
N2 = if
T2 < 0 -> 0.0;
true -> math:pow(T2, 4) * dot(
gcoord(Seed, {I + I2, J + J2, K + K2}),
{X2, Y2, Z2}
)
end,
T3 = 0.6 - X3 * X3 - Y3 * Y3 - Z3 * Z3,
N3 = if
T3 < 0 -> 0.0;
true -> math:pow(T3, 4) * dot(
gcoord(Seed, {I + 1, J + 1, K + 1}),
{X3, Y3, Z3}
)
end,
40.0 * (N0 + N1 + N2 + N3);
raw(Seed, {X, Y, Z, W}) ->
T = (X + Y + Z + W) * ?F4,
{I, J, K, L} = {trunc(X + T), trunc(Y + T), trunc(Z + T), trunc(W + T)},
TT = (I + J + K + L) * ?G4,
{X0, Y0, Z0, W0} = {X - (I - TT), Y - (J - TT), Z - (K - TT), W - (L - TT)},
C = (
(if X0 > Y0 -> 32; true -> 0 end)
+ (if X0 > Z0 -> 16; true -> 0 end)
+ (if Y0 > Z0 -> 8; true -> 0 end)
+ (if X0 > W0 -> 4; true -> 0 end)
+ (if Y0 > W0 -> 2; true -> 0 end)
+ (if Z0 > W0 -> 1; true -> 0 end)
),
CC = element(C + 1, ?Simplex4D),
{C0, C1, C2, C3} = {
element(1, CC),
element(2, CC),
element(3, CC),
element(4, CC)
},
I1 = if C0 >= 3 -> 1; true -> 0 end,
J1 = if C1 >= 3 -> 1; true -> 0 end,
K1 = if C2 >= 3 -> 1; true -> 0 end,
L1 = if C3 >= 3 -> 1; true -> 0 end,
I2 = if C0 >= 2 -> 1; true -> 0 end,
J2 = if C1 >= 2 -> 1; true -> 0 end,
K2 = if C2 >= 2 -> 1; true -> 0 end,
L2 = if C3 >= 2 -> 1; true -> 0 end,
I3 = if C0 >= 1 -> 1; true -> 0 end,
J3 = if C1 >= 1 -> 1; true -> 0 end,
K3 = if C2 >= 1 -> 1; true -> 0 end,
L3 = if C3 >= 1 -> 1; true -> 0 end,
X1 = X0 - I1 + ?G4,
Y1 = Y0 - J1 + ?G4,
Z1 = Z0 - K1 + ?G4,
W1 = W0 - L1 + ?G4,
X2 = X0 - I2 + 2.0 * ?G4,
Y2 = Y0 - J2 + 2.0 * ?G4,
Z2 = Z0 - K2 + 2.0 * ?G4,
W2 = W0 - L2 + 2.0 * ?G4,
X3 = X0 - I3 + 3.0 * ?G4,
Y3 = Y0 - J3 + 3.0 * ?G4,
Z3 = Z0 - K3 + 3.0 * ?G4,
W3 = W0 - L3 + 3.0 * ?G4,
X4 = X0 - 1.0 + 4.0 * ?G4,
Y4 = Y0 - 1.0 + 4.0 * ?G4,
Z4 = Z0 - 1.0 + 4.0 * ?G4,
W4 = W0 - 1.0 + 4.0 * ?G4,
T0 = 0.6 - X0 * X0 - Y0 * Y0 - Z0 * Z0 - W0 * W0,
N0 = if
T0 < 0 -> 0.0;
true -> math:pow(T0, 4) * dot(
gcoord(Seed, {I, J, K, L}),
{X0, Y0, Z0, W0}
)
end,
T1 = 0.6 - X1 * X1 - Y1 * Y1 - Z1 * Z1 - W1 * W1,
N1 = if
T1 < 0 -> 0.0;
true -> math:pow(T1, 4) * dot(
gcoord(Seed, {I + I1, J + J1, K + K1, L + L1}),
{x1, y1, z1, w1}
)
end,
T2 = 0.6 - X2 * X2 - Y2 * Y2 - Z2 * Z2 - W2 * W2,
N2 = if
T2 < 0 -> 0.0;
true -> math:pow(T2, 4) * dot(
gcoord(Seed, {I + I2, J + J2, K + K2, L + L2}),
{X2, Y2, Z2, W2}
)
end,
T3 = 0.6 - X3 * X3 - Y3 * Y3 - Z3 * Z3 - W3 * W3,
N3 = if
T3 < 0 -> 0.0;
true -> math:pow(T3, 4) * dot(
gcoord(Seed, {I + I3, J + I3, K + K3, L + L3}),
{X3, Y3, Z3, W3}
)
end,
T4 = 0.6 - X4 * X4 - Y4 * Y4 - Z4 * Z4 - W4 * W4,
N4 = if
T4 < 0 -> 0.0;
true -> math:pow(T4, 4) * dot(
gcoord(Seed, {I + 1, J + 1, K + 1, L + 1}),
{X4, Y4, Z4, W4}
)
end,
44.5 * (N0 + N1 + N2 + N3 + N4).
%%====================================================================
%% Internal functions
%%====================================================================
coord(Seed, Position) ->
Hash = trunc(seed_hash(Seed, Position)),
((Hash bxor (Hash bsr 16)) rem ?LutMask) + 1.
dot(G, {X, Y}) -> element(1, G) * X + element(2, G) * Y;
dot(G, {X, Y, Z}) -> element(1, G) * X + element(2, G) * Y + element(3, G) * Z;
dot(G, {X, Y, Z, W}) ->
element(1, G) * X
+ element(2, G) * Y
+ element(3, G) * Z
+ element(4, G) * W.
gcoord(Seed, {I, J}) -> element(coord(Seed, {I, J}), ?Grad2D);
gcoord(Seed, {I, J, K}) -> element(coord(Seed, {I, J, K}), ?Grad3D);
gcoord(Seed, {I, J, K, L}) -> element(coord(Seed, {I, J, K, L}), ?Grad4D).
seed_hash(Seed, {X, Y}) -> (((Seed bxor X) * 15485863) bxor Y) * 10057189;
seed_hash(Seed, {X, Y, Z}) -> (seed_hash(Seed, {X, Y}) bxor Z) * 987391;
seed_hash(Seed, {X, Y, Z, W}) -> (seed_hash(Seed, {X, Y, Z}) bxor W) * 418493.