Nullvektor normiern
-
Hallo,
es geht hier eher um eine Vektor Klasse, deswegen steht das hier nicht im Mathe Forum. Eine Vektor Klasse hat eine Funktion zum normieren, was mache ich, wenn die Länge des Vektors 0 beträgt? Auf 0 lassen, oder X auf 1 setzen, oder alle Komponennten auf den gleichen Wert setzen?
-
Welches X? Welche Komponenten?
-
Die Länge ist also 0. Dann also einfach alle Komponenten durch 0 teilen.
Und das löst man auf C++-Art durch ignorieren des Problems. Verbiete dem Benutzer das einfach.
Je nach Gusto kann assert verwendet werden.
-
[Rewind] schrieb:
Welches X? Welche Komponenten?
Die Komponennten die ein Vektor eben hat? x, y, (z), (w),
volkard: Hm.. ich möchte da kein assert und keine Exception haben. Die Alternative wäre also, den Vektor einfach auf 0 zu lassen?
(Ich lese daraus, dass es mathematisch gar nicht definiert ist, was man beim Normieren eines Nullvektors macht?)
-
Da es mathematisch keinen Sinn ergibt, musst du selber etwas definieren. Ich würde mir aber hier nicht die Mühe machen, und einfach voraussetzen, dass sowas nie passiert. Ein Nullvektor zu normieren sollte genau so ein Fehler sein, wie in einen Nullzeiger zu schreiben
-
Normierer schrieb:
volkard: Hm.. ich möchte da kein assert und keine Exception haben. Die Alternative wäre also, den Vektor einfach auf 0 zu lassen?
Zum Beispiel. Oder auf 42|43|71|1729. Was hübsches halt.
Doch Moment mal! Warum überhaupt mit einem teuren if testen? Laß die Mühle doch mit voll Karacho da reinrauschen.
Trau Dich und teile durch 0!
-
Der Schöne an einem 0./0. ist, dass man am Ergebnis (nan) sofort sieht, dass es einen Fehler gab, aber man dafür überhaupt keine Nachteile hatte. Jeder andere Fall läuft mit maximaler Performance und derjenige der dir fälschlicherweise einen Nullvektor serviert hat, sieht hinterher trotzdem, dass etwas falsch war. Leider sieht er nicht, was genau falsch war
. Da muss er dann eben selber debuggen. Aber das kostet nur ihn und nicht alle anderen.
-
Durch 0 teilen wäre in meinem Fall nicht so toll, da es sich nicht um Mathe sondern um eine Simulation handelt - die soll wegen so etwas nicht abstürzen und es kann durchaus vorkommen, dass ein Nullvektor normiert wird.
-
Normierer schrieb:
... und es kann durchaus vorkommen, dass ein Nullvektor normiert wird.
Dann würde ich mir mal über das Modell Gedanken machen...
-
Wieso abstürzen?
Und wenn ein Nullvektor normiert wird, dann ist vorher sowieso schon etwas gewaltig schief gegangen.
-
berndbernd schrieb:
Normierer schrieb:
... und es kann durchaus vorkommen, dass ein Nullvektor normiert wird.
Dann würde ich mir mal über das Modell Gedanken machen...
Erstens das und wenn wirklich nicht durch 0 geteilt werden darf, dann sollte sich der Code, der den Vektor normieren will darüber Gedanken machen und nicht der Vektor.