Zitat von
braingrenade:
Delphi-Quellcode:
vbuf := subvectors(chspr[i].v,chspr[i2].v) ;
alpha := arccos(dotproduct(chspr[i].v,vbuf)/((magnitude(chspr[i].v)*magnitude(vbuf))));
lengthv := cos(alpha)*magnitude(chspr[i].v);
v1 := scalevector(normalize(vbuf),lengthv);
// ich glaube du musst an dieser Stelle vbuf neu berechnen ... du musst ja meinen VektorA für zwei verschiedene Kugeln berechnen! mit anderen Worten es gibt zwei verschiedene Vektoren A
alpha := arccos(dotproduct(chspr[i2].v,vbuf)/((magnitude(chspr[i2].v)*magnitude(vbuf))));
lengthv := cos(alpha)*magnitude(chspr[i2].v);
v2 := scalevector(normalize(vbuf),lengthv);
vbuf := addvectors(v1,v2); // vbuf ist am Ende immer (0,0), v1 und v2 sind "Gegenvektoren"
chspr[i].v := subvectors(chspr[i].v,vbuf);
chspr[i2].v := addvectors(chspr[i2].v,vbuf);
EDIT: genau das ist der Fehler, du musst bei meinem Kommentar vbuf := -vbuf einsetzen, da das ganze ja für den zweiten Punkt "von der anderen Seite" betrachtet werden muss.
EDIT2: im Übrigen würde ich vbuf umbenennen ... aber das ist wohl eher marginal