Bin schwer am verzweifeln.
Ich habe versucht eine doppelte Gaußfunktion in ein Javascript zu basteln. also eine Gaußkurve, deren "sigma" eine neue Gaußfunktion ist.
sieht so aus die funktion:
(4 + 96*Exp[-(x/(6 + 41*Exp[-(y/47)^2]))^2])/100
nachdem ich schon des öfteren an der implementierung komplizierter funktionen gescheitert bin, hab ich das ganz langsam schritt für schritt von innen nach außen ausrechnen wollen, und zwar so:
var bas1 = (y/47);
var exp1 = (Math.pow(2, bas1));
var exp1b = ((-1)*exp1);
var efkt1 = (Math.exp(exp1b));
var nenn = (6 + (41 * efkt1));
var bas2 = (X /nenn);
var exp2 = (Math.pow(2,bas2));
var exp2b = ((-1)*exp2);
var efkt2 = (Math.exp(exp2b));
var key = (4 + (96 * efkt2));
var keyexp = (key / 100);
Das muss irgendwo ein fehler sein, da das script für zB X=20, Y=5 einen wert um 0,16 rausbekommt. mathematika (mit dem ich die funktion erstellt habe) und mein taschenrechner bekommen aber ~0,83 raus.... jetzt fällt schon auf, dass grade das komplement zu 1 ist, aber warum??
ich bin mir 99% sicher, dass der fehler in dem teil liegen muss, aber für alle, die es ganz genau haben wollen hier das gesamte script: (variablen heißen anders, aber damit kommt ihr sicher klar :P)
function keycap(val)
{
var wholvl = val;
var realExp;
var gro = wholvl;
var klei = monslvl;
if(monslvl >= wholvl){gro = monslvl; klei = wholvl;}
var quot = parseFloat(klei/gro);
var chardiff = parseFloat(100*(1-quot));
var bas1 = parseFloat(wholvl/47);
var exp1 = parseFloat(Math.pow(2, bas1));
var exp1b = parseFloat((-1)*exp1);
var efkt1 = parseFloat(Math.exp(exp1b));
var nenn = parseFloat(6 + (41 * efkt1));
var bas2 = parseFloat(chardiff/nenn);
var exp2 = parseFloat(Math.pow(2,bas2));
var exp2b = parseFloat((-1)*exp2);
var efkt2 = parseFloat(Math.exp(exp2b));
var key = parseFloat(4 + (96 * efkt2));
var keyexp = parseFloat(key / 100);
var maxlvl = (1.1 * wholvl);
var chklvl = (monslvl + 1);
var whoExp = ((wholvl + 9)/(lvlYOU + lvlrP1 + lvlrP2 + lvlrP3 + lvlrP4 + lvlrP5 + lvlrP6 + lvlrP7 + lvlrP8 + lvlrP9 + lvlrP10 + lvlrP11 + lvlrP12 + lvlrP13 + lvlrP14 + lvlrP15 + (9 * (rangePlay + 1))));
if(monslvl >= maxlvl+1){realExp = parseFloat(whoExp * keyexp);}
else if(wholvl >= chklvl){realExp = parseFloat(whoExp * keyexp);}
else if(wholvl == monslvl){realExp = whoExp;}
else{realExp = whoExp;}
if(wholvl == 0){realExp = 0;}
return realExp;
}
also... aufgerufen wird die funktion vom wert Y. X ist "chardiff". monslvl is in der übergeordneten funktion definiert, genau wie die anderen unbekannten variablen.
vielen dank an alle, die bis hierher gelesen haben ;)