atan2 în Dart

Returnează unghiul (în radiani, între -π și π) al punctului (x, y) față de axa orizontală.

Sintaxă
import 'dart:math';

double atan2(num y, num x)

Ce face atan2

atan2(y, x) calculează unghiul segmentului de la origine la punctul (x, y). Atenție la ordine: întâi y, apoi x.

Spre deosebire de atan(y / x), atan2 știe în ce cadran se află punctul (după semnele lui x și y) și funcționează și când x este 0. Rezultatul este între -π și π; înmulțește cu 180 / pi pentru grade.

Parametri

Parametru Descriere
y Coordonata verticală.
x Coordonata orizontală.

Ce returnează

Unghiul în radiani, ca double, în intervalul [-π, π].

Exemple

Exemplul 1: Unghiul în fiecare cadran

atan simplu ar da același rezultat pentru (1, 1) și (-1, -1); atan2 le deosebește.

import 'dart:math';

void main() {
  final puncte = [(1, 1), (-1, 1), (-1, -1), (1, -1), (0, 5)];
  for (final (x, y) in puncte) {
    final grade = atan2(y, x) * 180 / pi;
    print('($x, $y) -> ${grade.toStringAsFixed(1)}°');
  }
}

Rezultat

(1, 1) -> 45.0°
(-1, 1) -> 135.0°
(-1, -1) -> -135.0°
(1, -1) -> -45.0°
(0, 5) -> 90.0°

Exemplul 2: Direcția de la Iași la Cluj pe o hartă

Pe o hartă plată cu coordonate în km (est = x, nord = y), calculăm direcția de deplasare.

import 'dart:math';

void main() {
  const iasi = (x: 400.0, y: 300.0);
  const cluj = (x: 100.0, y: 230.0);
  final dx = cluj.x - iasi.x;
  final dy = cluj.y - iasi.y;
  final grade = atan2(dy, dx) * 180 / pi;
  print('Direcție: ${grade.toStringAsFixed(1)}° față de est');
  print('Distanță: ${sqrt(dx * dx + dy * dy).toStringAsFixed(0)} km');
}

Rezultat

Direcție: -166.9° față de est
Distanță: 308 km

Greșeli frecvente

  • Inversezi argumentele: atan2(x, y) dă alt unghi. Ordinea corectă este atan2(y, x).
  • Uiți că rezultatul este în radiani și îl afișezi ca grade.

Comenzi înrudite

  • sin: Funcțiile trigonometrice sin, cos și tan; unghiul se dă în radiani, nu în grade.
  • pi: Constantele matematice din dart:math: pi, e, sqrt2, ln10 (și ln2, log2e, log10e, sqrt1_2).
  • Point.distanceTo: distanceTo dă distanța în linie dreaptă până la alt punct; magnitude este distanța de la origine (0, 0).