Das ist richtig, die einzelnen Vektoren werden verändert. Allerdings wüsste ich keinen Verwendungszweck nach dieser Abfrage. Ich finde es gar nicht mal schlecht. Mir schwebte das eher als Unterfunktion vor.
Stimmt, das mit dem Quadrat habe ich übersehen. Man sollte nicht totmüde noch an irgendwelchen Funktionen herumdoktern. An der abs() Funktion führt wohl kein Weg vorbei. Auf die wollt ich eigentlich verzichten. *seufz*
So hatte ich mir den endgültigen Code vorgestellt. Eingangsdaten sind halt nicht die Positionen, sondern die UserIndizes.
Code:
stock distance(UserIndexA,UserIndexV) {
new Attacker[MAX_NAME_LENGTH];
new Victim[MAX_NAME_LENGTH];
new vec1[3],vec2[3];
new k = -1;
new i = 0;
new j = 0;
playerinfo(UserIndexA,Attacker,MAX_NAME_LENGTH);
playerinfo(UserIndexB,Victim,MAX_NAME_LENGTH);
get_userorigin(Attacker,vec1[0],vec1[1],vec1[2]);
get_userorigin(Victim,vec2[0],vec2[1],vec2[2]);
for(x=0;x<=2;x++){
vec1[x] = vec1[x] - vec2[x];
vec2[x] = vec1[x] * vec1[x];
k = max(abs(vec1[x]),k);
i +=vec2[x];
}
j = i;
while(j > k) {
j = (j + k) / 2;
k = i / j;
}
return j;
}
stock abs(num) {
if(num > 0) {
return num;
}
return -num;
}
BTW, die Angabe der Genauigkeit würde ich weglassen, da bei Deiner jetzigen Implementierung sich nur die Rechenzeit erhöht, das Ergebnis aber exakt gleich ist. Durch j/l reduzierst Du die Genauigkeit leider wieder auf 1.
_________________
Der schwarze Ritter triumphiert immer...
WING-Clan