0 registered members (),
811
guests, and 5
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
variable 'spiegeln'
#259822
04/07/09 21:42
04/07/09 21:42
|
Joined: Jan 2007
Posts: 1,619 Germany
Scorpion
OP
Serious User
|
OP
Serious User
Joined: Jan 2007
Posts: 1,619
Germany
|
hallo, ich suche nach einer kleinen formel, mit der ich eine variable in einen bestimmten zahlenraum bekommen kann. die enginefunktion cycle hilft mir nicht weiter, weil sobald die variable an einer grenze angekommen ist, sozusagen 'zur anderen seite' springt. Ich brauche es aber so, dass wenn ich die variable hochzähle, keine sprünge, sondern ein linearer übergang vorhanden ist. Ein kleines Beispiel wenn der zahlen raum 0 bis 1 lautet:
0.7 => 0.7
1 => 1
1.3 => 0.7
1.6 => 0.4
1.9 => 0.1
2.1 => 0.1
2.4 => 0.4
2.7 => 0.7
3 => 1
3.3 => 0.7 Ich hoffe das ist soweit klar und ihr könnt mir weiterhelfen^^ Scorpion
Last edited by Scorpion; 04/08/09 14:32.
|
|
|
Re: variable 'spiegeln'
[Re: Saturnus]
#259840
04/07/09 23:33
04/07/09 23:33
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
Member
|
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
Naja, für die Zahlenräume 0 bis 1 hätte ich denke ich was. Es funktioniert aber eben nur damit und ist keine engine Funktion. Denn wenn 0 bis 1 gebraucht werden würde müsste man es mit if machen
var a = 0 ;//variable die hochgezählt wird
var b = 1;//variable die das ergebnis bekommt
while(1)
{
a += 0.6;
if( fraction(a) < 5 ){b = fraction(a)}//Falls Nachkommastelle unter 5 ist bekommt b einfach den wert
if( fraction(a) >= 5 ){b = 1 - fraction(a)}//andernfalls wird 1 von der nachkommastelle abgezogen
}
Es würde das Ergebnis deines Beispieles bringen (wenn ich grad keinen Knick in der Logik habe). Aber passt eben nur für 0 bis 1 Sorry weiß grade nit mehr.
Last edited by Nicotin; 04/07/09 23:34.
|
|
|
Re: variable 'spiegeln'
[Re: Nicotin]
#260010
04/08/09 14:38
04/08/09 14:38
|
Joined: Jan 2007
Posts: 1,619 Germany
Scorpion
OP
Serious User
|
OP
Serious User
Joined: Jan 2007
Posts: 1,619
Germany
|
es tut mir leid, bei dem beispiel was ich gegeben habe, muss bei 1.6 natürlich 0.4 herauskommen. Die funktion funktioniert zur hälfe wie das clampen, aber bei jedem 2ten 'überschreiten' muss gespiegelt werden Als funktion dargestellt soll folgendes erreicht werden: |
1| /\ /\
| / \ / \
| / \ / \ /
| / \ / \ /
|/________\/________\/__
0 1 2 3 4
|
|
|
Re: variable 'spiegeln'
[Re: Scorpion]
#260051
04/08/09 17:54
04/08/09 17:54
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
Member
|
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
Ich bin mir aber relativ sicher das mein code genau das tut^^. EDIT: Neuer Code: Ok, hab den Code jetzt geändert und getestet. Maximum und minimum sind außwählbar und alles sollte funzen^^
function clamp_new(var variable, var minimum, var maximum)
{
var temp_max;
var temp;
temp_max = maximum - minimum;//erechne das maximum vom Nullpunkt aus
if (variable < minimum){variable = minimum;}
if( fraction(variable/temp_max) < 5 ){temp = fraction(variable/temp_max);}//Falls Nachkommastelle unter 5 ist bekommt b einfach den wert
if( fraction(variable/temp_max) >= 5 ){temp = 1 - fraction(variable/temp_max);}//andernfalls wird 1 von der nachkommastelle abgezogen
temp *= temp_max;//Rechne die Variable wieder hoch
variable = temp;
return(variable);
}
Last edited by Nicotin; 04/08/09 18:24.
|
|
|
Re: variable 'spiegeln'
[Re: Nicotin]
#260066
04/08/09 18:50
04/08/09 18:50
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
Member
|
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
Ok, der Code is nun getestet und sollte funzen. Versuch es mal bitte^^
function clamp_new(var variable, var minimum, var maximum)
{
var temp_max;
var temp;
var temp_var;
temp_max = maximum - minimum;//erechne das maximum vom Nullpunkt aus
if(variable <= minimum || variable <= maximum){return(variable);}
if (variable < minimum){variable = minimum;}
temp_var = (variable-minimum) / temp_max;
if (integer(temp_var) < 1){ variable = temp_var;}
if (fraction(integer(temp_var)/2) == 0.5)
{
if( fraction(temp_var) > 5 ){temp = fraction(temp_var);}//Falls Nachkommastelle unter 5 ist bekommt b einfach den wert
if( fraction(temp_var) <= 5 ){temp = 1 - fraction(temp_var);}//andernfalls wird 1 von der nachkommastelle abgezogen
}
if (fraction(integer(temp_var)/2) == 0)
{
if( fraction(temp_var) < 5 ){temp = fraction(temp_var);}//Falls Nachkommastelle unter 5 ist bekommt b einfach den wert
if( fraction(temp_var) >= 5 ){temp = 1 - fraction(temp_var);}//andernfalls wird 1 von der nachkommastelle abgezogen
}
temp *= temp_max;//Rechne die Variable wieder hoch
temp += minimum;
variable = temp;
return(variable);
}
|
|
|
Re: variable 'spiegeln'
[Re: Nicotin]
#260069
04/08/09 19:21
04/08/09 19:21
|
Joined: Jan 2007
Posts: 1,619 Germany
Scorpion
OP
Serious User
|
OP
Serious User
Joined: Jan 2007
Posts: 1,619
Germany
|
erstmal vielen dank, das ist so schon gut zu gebrauchen. ich habe noch ein bischen dran rumgeschraubt und denke so sollte es im raum von 0..1 klappen float mirror(float x){
x=(var)x%1;
float tmp = integer(x)*0.5;
if(tmp==integer(tmp))
x=1-x;
return x;
}
Last edited by Scorpion; 04/08/09 19:21.
|
|
|
Re: variable 'spiegeln'
[Re: Scorpion]
#260073
04/08/09 19:32
04/08/09 19:32
|
Joined: Jul 2008
Posts: 170 Germany, near Mainz
Nicotin
Member
|
Member
Joined: Jul 2008
Posts: 170
Germany, near Mainz
|
naja, als ich deinen code sah dacht ich nur "warum einfach wenns auch schwer geht" xD. Naja, dann bin ich froh wenn ich wenigstens den anstoß geben konnt
|
|
|
|