Ich vermute, dass hier die Gefahr einer vorzeitigen Optimierung besteht. Seien Sie außerdem vorsichtig mit Ihrer Geometrie. Ihr entgegengesetzter/benachbarter Ansatz ist eine Eigenschaft von rechtwinkligen Dreiecken, ist es das, was Sie tatsächlich haben?
Ich gehe davon aus, dass Ihre Punkte planar sind, so dass sie für den allgemeinen Fall implizit zwei Vektoren aus dem Ursprung darstellen (nennen Sie diese v1 und v2), so dass Ihr Winkel
theta=arccos(dot(v1,v2)/(|v1||v2|)) wobei |.| die Vektorlänge ist.
Ob dies schneller geht, hängt von vielen Faktoren ab (vorausgesetzt, es besteht Bedarf). Kennen Sie die Vektorlängen, oder müssen Sie sie berechnen? Wie schnell können Sie in Ihrer Architektur ein Punktprodukt berechnen? Wie schnell ist acos? An einem gewissen Punkt könnten Tricks wie das Nachschlagen in Tabellen (wahrscheinlich interpoliert) helfen, aber das geht zu Lasten der Genauigkeit.
Es ist alles ein Kompromiss, es gibt wirklich keine allgemeine Antwort auf Ihre Frage.
[Bearbeiten: Kommentar hinzugefügt]
Ich möchte noch einmal betonen, dass das Spiel "x ist am schnellsten" mit modernen Prozessoren und Compilern sowieso ein bisschen ein Kinderspiel ist. Man weiß es erst, wenn man es misst und den generierten Code begutachtet. Wenn Sie den Punkt erreichen, an dem Sie sich wirklich für ein (hoffentlich kleines) Stück Code auf dieser Ebene interessieren, können Sie im Detail herausfinden, was Ihr System tut. Aber das ist sehr mühsam. Vielleicht ist eine Tabelle gut. Vielleicht haben Sie aber auch schnelle Vektorberechnungen und einen kleinen Cache. usw. usw. Es läuft alles auf ein "es kommt darauf an" hinaus. Das tut mir leid. Andererseits, wenn Sie haben nicht den Punkt erreicht, an dem Sie sich wirklich so sehr um dieses Stückchen Code sorgen... Sie sollten wahrscheinlich überhaupt nicht auf dieser Ebene darüber nachdenken. Machen Sie es richtig. Machen Sie es sauber (was sowohl Abstraktion als auch Code bedeutet). Dann kümmern Sie sich um den Overhead.
7 Stimmen
Vielleicht sollten Sie Ihren Link überprüfen - und aufhören, bei der Arbeit Spiele zu spielen! :-)
7 Stimmen
"Big O"?? Bitte bezeichnen Sie nicht alles, was mit Effizienz zu tun hat, mit dieser Bezeichnung. Die Berechnung wird O(1) sein. Aber das bedeutet gar nichts und schon gar nicht, dass sie schnell ist.
1 Stimmen
Ok, ich habe den Titel geändert. Tut mir leid, ich lerne das Zeug immer noch!