Rectangle.intersects în Dart

intersects spune dacă două dreptunghiuri se suprapun; intersection returnează zona comună sau null.

Sintaxă
bool intersects(Rectangle<num> other)
Rectangle<T>? intersection(Rectangle<T> other)
Rectangle<T> boundingBox(Rectangle<T> other)

Ce face Rectangle.intersects

a.intersects(b) returnează true dacă dreptunghiurile au cel puțin un punct comun (atingerea pe margine contează).

a.intersection(b) returnează dreptunghiul comun sau null dacă nu se suprapun, de aceea tipul este Rectangle<T>?. boundingBox face opusul: cel mai mic dreptunghi care le cuprinde pe amândouă.

Parametri

Parametru Descriere
other Celălalt dreptunghi.

Ce returnează

intersects: bool. intersection: zona comună sau null.

Exemple

Exemplul 1: Suprapunere și zonă comună

import 'dart:math';

void main() {
  const a = Rectangle(0, 0, 10, 5);
  const b = Rectangle(5, 2, 10, 10);
  const c = Rectangle(20, 20, 3, 3);
  print(a.intersects(b));
  print(a.intersection(b));
  print(a.intersects(c));
  print(a.intersection(c));
  print(a.boundingBox(c));
}

Rezultat

true
Rectangle (5, 2) 5 x 3
false
null
Rectangle (0, 0) 23 x 23

Exemplul 2: Coliziune între jucător și obstacole

import 'dart:math';

void main() {
  const jucator = Rectangle(50, 50, 20, 20);
  const obstacole = {
    'zid': Rectangle(65, 40, 10, 100),
    'copac': Rectangle(200, 50, 30, 30),
  };
  obstacole.forEach((nume, o) {
    final zona = jucator.intersection(o);
    if (zona == null) {
      print('$nume: liber');
    } else {
      print('$nume: coliziune pe ${zona.width} x ${zona.height}');
    }
  });
}

Rezultat

zid: coliziune pe 5 x 20
copac: liber

Greșeli frecvente

  • Folosești rezultatul lui intersection fără să verifici null. Analizorul te obligă: compară cu null sau folosește ?..

Comenzi înrudite

  • Rectangle: Un dreptunghi cu laturile paralele cu axele, dat prin colțul stânga-sus, lățime (width) și înălțime (height).
  • Rectangle.containsPoint: Verifică dacă un punct se află în interiorul dreptunghiului sau pe marginea lui.