Baseline Widely available
Die statische Methode Math.atan2()
gibt den Winkel in der Ebene (in Radiant) zwischen der positiven x-Achse und dem Strahl von (0, 0) zu dem Punkt (x, y) zurück, für Math.atan2(y, x)
.
function calcAngleDegrees(x, y) {
return (Math.atan2(y, x) * 180) / Math.PI;
}
console.log(calcAngleDegrees(5, 5));
// Expected output: 45
console.log(calcAngleDegrees(10, 10));
// Expected output: 45
console.log(calcAngleDegrees(0, 10));
// Expected output: 90
Syntax Parameter
y
Die y-Koordinate des Punktes.
x
Die x-Koordinate des Punktes.
Der Winkel in Radiant (zwischen -Ï und Ï, inklusive) zwischen der positiven x-Achse und dem Strahl von (0, 0) zu dem Punkt (x, y).
BeschreibungDie Methode Math.atan2()
misst den gegen den Uhrzeigersinn gerichteten Winkel θ, in Radiant, zwischen der positiven x-Achse und dem Punkt (x, y)
. Beachten Sie, dass die Argumente dieser Funktion zuerst die y-Koordinate und dann die x-Koordinate übergeben.
Math.atan2()
wird getrennte x
- und y
-Argumente übergeben, während Math.atan()
das Verhältnis dieser beiden Argumente übergeben wird. Math.atan2(y, x)
unterscheidet sich von Math.atan(y / x)
in den folgenden Fällen:
x
y
Math.atan2(y, x)
Math.atan(y / x)
Infinity
Infinity
Ï / 4 NaN
Infinity
-Infinity
-Ï / 4 NaN
-Infinity
Infinity
3Ï / 4 NaN
-Infinity
-Infinity
-3Ï / 4 NaN
0 0 0 NaN
0 -0 -0 NaN
< 0 (einschlieÃlich -0
) 0 Ï 0 < 0 (einschlieÃlich -0
) -0 -Ï 0 -Infinity
> 0 Ï -0 -0 > 0 Ï / 2 -Ï / 2 -Infinity
< 0 -Ï 0 -0 < 0 -Ï / 2 Ï / 2
Zusätzlich würde Math.atan2()
für Punkte im zweiten und dritten Quadranten (x < 0
) einen Winkel ausgeben, der kleiner als - Ï 2 -\frac{\pi}{2} oder gröÃer als Ï 2 \frac{\pi}{2} ist.
Da atan2()
eine statische Methode von Math
ist, verwenden Sie sie immer als Math.atan2()
, anstatt als Methode eines von Ihnen erstellten Math
-Objekts (Math
ist kein Konstruktor).
Math.atan2(90, 15); // 1.4056476493802699
Math.atan2(15, 90); // 0.16514867741462683
Unterschied zwischen Math.atan2(y, x) und Math.atan(y / x)
Das folgende Skript gibt alle Eingaben aus, die eine Differenz zwischen Math.atan2(y, x)
und Math.atan(y / x)
erzeugen.
const formattedNumbers = new Map([
[-Math.PI, "-Ï"],
[(-3 * Math.PI) / 4, "-3Ï/4"],
[-Math.PI / 2, "-Ï/2"],
[-Math.PI / 4, "-Ï/4"],
[Math.PI / 4, "Ï/4"],
[Math.PI / 2, "Ï/2"],
[(3 * Math.PI) / 4, "3Ï/4"],
[Math.PI, "Ï"],
[-Infinity, "-â"],
[Infinity, "â"],
]);
function format(template, ...args) {
return String.raw(
{ raw: template },
...args.map((num) =>
(Object.is(num, -0)
? "-0"
: (formattedNumbers.get(num) ?? String(num))
).padEnd(5),
),
);
}
console.log(`| x | y | atan2 | atan |
|-------|-------|-------|-------|`);
for (const x of [-Infinity, -1, -0, 0, 1, Infinity]) {
for (const y of [-Infinity, -1, -0, 0, 1, Infinity]) {
const atan2 = Math.atan2(y, x);
const atan = Math.atan(y / x);
if (!Object.is(atan2, atan)) {
console.log(format`| ${x} | ${y} | ${atan2} | ${atan} |`);
}
}
}
Die Ausgabe ist:
| x | y | atan2 | atan | |-------|-------|-------|-------| | -â | -â | -3Ï/4 | NaN | | -â | -1 | -Ï | 0 | | -â | -0 | -Ï | 0 | | -â | 0 | Ï | -0 | | -â | 1 | Ï | -0 | | -â | â | 3Ï/4 | NaN | | -1 | -â | -Ï/2 | Ï/2 | | -1 | -1 | -3Ï/4 | Ï/4 | | -1 | -0 | -Ï | 0 | | -1 | 0 | Ï | -0 | | -1 | 1 | 3Ï/4 | -Ï/4 | | -1 | â | Ï/2 | -Ï/2 | | -0 | -â | -Ï/2 | Ï/2 | | -0 | -1 | -Ï/2 | Ï/2 | | -0 | -0 | -Ï | NaN | | -0 | 0 | Ï | NaN | | -0 | 1 | Ï/2 | -Ï/2 | | -0 | â | Ï/2 | -Ï/2 | | 0 | -0 | -0 | NaN | | 0 | 0 | 0 | NaN | | â | -â | -Ï/4 | NaN | | â | â | Ï/4 | NaN |Spezifikationen Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4