Holen Sie sich den Winkel einer Linie, die sich von Horizont
Möchte ich wissen wie man die Winkel der Linie A-B von der horizontalen Achse X. die Anderen Fragen DAMIT zu tun, dass nur zwischen zwei Linien. Ich bin mir bewusst, ich kann immer ziehen die zweite Zeile A-C und berechnen, aber ich Frage mich, ob es eine schnellere Methode.
EDIT: ich bin mir sehr sicher, dass ich es nicht mache eine vorzeitige Optimierung.
- Vorsichtig sein, vorzeitige Optimierung. Haben Sie ein Profil der code?
- Ich kann nicht verstehen, die nach unten Stimmen. Ist das eine dumme Frage? oder ist es, wenn offensiv? hmm..
- Posten Sie Ihre profiling-Ergebnisse. Selbst zu beweisen, dass Sie brauchen eine schnellere Lösung.
- stellen Sie sich eine situation, die Sie haben, um die Winkel Zehntausende von malen .NET CF mobilen Gerät, werden Sie wollen, um es so schnell wie möglich.
- "wollen[ing], um es so schnell wie möglich" ist das problem. Zuerst sollte man wollen, damit es funktioniert. Wenn es dann nicht zufriedenstellend ist, finden Sie heraus, was das problem verursacht und es zu beheben.
- Vielen Dank für die Kommentare sowieso. Zwei Menschen, die sich schon meine Frage beantwortet, ohne zu streiten, sollte ich die Frage stellen soll oder nicht. Ich bin genug mit Ihrer Antwort. 🙂
- Ich bin mir ziemlich sicher, dies ist eine berechtigte Frage. Die Antwort ist so einfach, einfach-zu-verstehen, dass es keinen Grund nicht zu verwenden. Ist dies nicht der Fall, wenn die vorzeitige Optimierung macht die Dinge schwerer zu verstehen und komplizierter. Diese tatsächlich vereinfacht die Dinge.
- Letzten Male, als man mich fragte, dieser es stellte sich heraus, dass das einzige, was Sie Taten, mit dem Winkel war später die Berechnung einer trigonometrischen Funktion, wie
sin
odercos
. Wenn das stimmt in diesem Fall, Sie kümmern sich um die Leistung, ist es wahrscheinlich, dass Sie sollten nicht eigentlich die Berechnung der Winkel. Aber es ist nur möglich, wenn die Empfehlung basiert auf dem, was Sie beabsichtigen zu tun mit dem Winkel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
atan
für, die.Wenn
dann gibt es eine schnelle Lösung: Unter diesen Bedingungen kann davon ausgegangen werden, dass tan(a) = a = atan(a), und daher nur weglassen, die atan () - Aufruf.
Könnte man auch verwenden, Arkuskosinus, wenn deine Linie in form
[r_x,r_y]
, wor_x
ist die änderung in x undr_y
ist die änderung in y.Ist es etwas undurchsichtiger, aber es ist im Grunde das Skalarprodukt Recht:
Wo
r
undv
sind beide einheitsvektoren (Vektoren der Länge 1). In unserem Fallv
ist der Vektor[1,0]
, und r istdamit ein Einheitsvektor.
Die x-Achse ist tatsächlich eine Linie mit der Gleichung
so könnten Sie die Lösung haben Sie schon.
Wenn Sie müssen, alle vier Quadranten, Atan2 ist dafür besser geeignet, als Atan.