Punto nel poligono
Il punto (1, 1) è dentro il rettangolo con angoli (0, 0), (4, 0), (4, 3) e (0, 3): un raggio tracciato verso destra attraversa il contorno una volta, e un numero dispari significa dentro. Va bene sia l'ordine orario sia quello antiorario. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Funziona nel tuo browser: gratis, senza registrazione, i file non escono dal tuo dispositivo.
Un test punto-nel-poligono risponde a una domanda di base di geometria computazionale: data una posizione di interrogazione e una forma chiusa definita da un anello ordinato di vertici, quella posizione cade nell’interno della forma? Rilievo, prodotti cartografici, maschere di collisione nei giochi, geofence logistiche e laboratori di geometria in aula hanno tutti bisogno della stessa risposta deterministica invece di uno schizzo a mano. Questo controllo implementa l’algoritmo classico di ray casting pari-dispari su coordinate planari: un semiraggio orizzontale è lanciato dal punto di prova verso l’infinito positivo, ogni spigolo del poligono è testato per un incrocio proprio, e la parità del conteggio degli incroci decide dentro versus fuori. I punti che cadono esattamente su uno spigolo o un vertice sono trattati come dentro e segnalati con un marcatore di contorno così i consumatori di insieme chiuso non necessitano di un secondo passaggio. Il poligono è chiuso implicitamente — non deve ripetere il primo vertice alla fine — e i vertici possono essere forniti come oggetti con campi x e y o come array di due elementi. Quando si forniscono meno di tre vertici la richiesta fallisce con un chiaro errore di validazione, perché un poligono richiede almeno un triangolo.
Come funziona il test di ray casting pari-dispari
Si parta da un punto di interrogazione finito con coordinate x e y e da un elenco ordinato di almeno tre vertici planari che formano un poligono semplice chiuso quando i vertici consecutivi sono collegati e l’ultimo si unisce al primo. L’algoritmo non richiede ordine orario o antiorario; entrambe le orientazioni sono valide sotto la regola pari-dispari. Dal punto di interrogazione, si immagini un raggio orizzontale che viaggia solo a destra, mai a sinistra.
Si percorra ogni spigolo del poligono e si decida se quello spigolo incrocia il raggio. Gli spigoli orizzontali sono ignorati per non creare doppi conteggi ambigui. Quando uno spigolo a cavallo dell’altezza del raggio — un estremo strettamente sopra la y di interrogazione e l’altro no — la x esatta dell’intersezione è calcolata con un parametro lineare lungo lo spigolo.
Se la x di interrogazione sta strettamente a sinistra di quell’intersezione, lo spigolo contribuisce un incrocio; se l’intersezione coincide con l’interrogazione entro una tolleranza numerica minuscola, il punto è classificato come sul contorno. Dopo aver processato tutti gli spigoli, un conteggio dispari di incroci significa dentro e un conteggio pari fuori, l’argomento classico di parità della curva di Jordan specializzato a un raggio orizzontale. Le coordinate devono essere finite; NaN e Infinity sono rifiutati.
Dove i controlli punto-nel-poligono compaiono nel lavoro reale
Prodotti di logistica e consegna chiedono se un fix GPS del corriere cade dentro un poligono di quartiere prima di offrire una tariffa per zona, e necessitano di una risposta deterministica che non derivi tra l’anteprima mappa del browser e il server. Giochi e media interattivi usano maschere di collisione allineate agli assi o a forma libera definite come anelli di vertici e testano posizioni di giocatore o proiettile ogni fotogramma senza tirare uno stack GIS pesante.
Moduli di geometria computazionale in aula insegnano ray casting, l’intuizione del teorema della curva di Jordan e casi limite di virgola mobile; un unico oracolo affidabile che restituisce sia il flag inside sia il conteggio grezzo degli incroci aiuta gli studenti a verificare i compiti passo per passo. Strumenti di pianificazione urbana e catastali classificano punti campione contro impronte di edifici o poligoni di zonizzazione in revisioni di progetto precoci quando le basi di topologia complete non sono ancora collegate.
Se in seguito Le serve perimetro di poligono, area di poligono, geodesia di grande cerchio, buchi multipoligono con la regola di winding non nullo o contenimento sferico sull’ellissoide WGS84, li tratti come intenti di ricerca e landing separati anziché sovraccaricare questa pagina del controllo planare punto-nel-poligono.
Casi d'uso
Appartenenza a geofence per la logistica
Classifichi punti GPS o di clic mappa contro zone di consegna e poligoni di quartiere con un flag inside deterministico condiviso da anteprime browser e prezzi backend.
Hit test per giochi e interfaccia
Verifichi se un cursore, giocatore o proiettile si trova dentro una maschera poligonale a forma libera senza importare una libreria GIS completa nel client.
Domande frequenti
Quale algoritmo usa questo controllo punto-nel-poligono?
Ray casting pari-dispari: un semiraggio orizzontale dal punto di interrogazione conta gli incroci con gli spigoli del poligono; dispari significa dentro, pari fuori.
Cosa succede se il poligono ha meno di tre vertici?
Un poligono richiede almeno tre vertici; un segmento o un singolo punto non è un anello valido per il contenimento.
L’ordine dei vertici conta (orario vs antiorario)?
Entrambe le orientazioni funzionano sotto la regola pari-dispari. L’ordine deve restare sequenziale attorno al contorno; mescolare i vertici produce una forma diversa (di solito autointersecante).
Quanto costa?
Lo strumento browser è gratis e gira in locale.
Cosa succede se il punto cade esattamente sul bordo?
Un punto esattamente su un lato o su un vertice conta come interno, e il risultato indica anche che si trova sul confine: un segnaposto messo sulla linea del recinto viene quindi considerato incluso.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/geo/point-in-polygon \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"x":1,"y":1,"polygon":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}'const res = await fetch("https://api.kit.forhosting.com/geo/point-in-polygon", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"x": 1,
"y": 1,
"polygon": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/point-in-polygon",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"x": 1,
"y": 1,
"polygon": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/point-in-polygon", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"x":1,"y":1,"polygon":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"x":1,"y":1,"polygon":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/point-in-polygon", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"x": 1,
"y": 1,
"polygon": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
}
]
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.point_in_polygon",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Come funziona il test di ray casting pari-dispari
Gli impatti di contorno scorciano a dentro con on_boundary vero così i marcatori disegnati sulla recinzione contano come contenuti. L’intero pipeline è aritmetica in virgola mobile deterministica: nessun seme casuale, nessun timestamp, nessuna chiamata di rete e nessuna deriva di modello, così input identici producono sempre JSON identico. Anelli degeneri con meno di tre vertici sono rifiutati con invalid_input invece di trattare in silenzio un segmento come poligono.
Cosa invia e cosa ottiene in risposta
Invii il punto di prova come campi numerici obbligatori x e y, e il poligono come array obbligatorio sotto il campo polygon con almeno tre vertici. Oggetti point annidati opzionali sono supportati per client che già impacchettano l’interrogazione come unica struttura. Quando l’array polygon ha lunghezza zero, uno o due, la richiesta fallisce con un messaggio che un test punto-nel-poligono necessita di almeno tre vertici, così chi chiama può correggere la geometria invece di indovinare. Ogni vertice può essere un oggetto con x e y o un array di due numeri; sono accettati anche gli alias vertices e points per l’anello. Campi mancanti, stringhe non numeriche, NaN e Infinity falliscono con invalid_input e non vengono addebitati. In caso di successo la risposta include inside come booleano, on_boundary come booleano, un oggetto point pulito, l’array polygon pulito, n come conteggio vertici, crossings come l’intero di incroci raggio-spigolo usato dal test di parità, method impostato a ray_casting e rule a even_odd. Controlli di fumo tipici includono un quadrato unitario con interrogazione a uno virgola uno che è dentro, un’interrogazione lontana fuori dal quadrato che è fuori, e un triangolo con un punto su un lato che è dentro con on_boundary vero. Il prezzo delle chiamate API riuscite è la base pubblicata di $0.002 per elemento; i fallimenti di validazione non consumano saldo prepagato.
Dove i controlli punto-nel-poligono compaiono nel lavoro reale
Poiché questa capacità è un motore di parse puro, il prezzo API è la base pubblicata di $0.002 per elemento riuscito e la validazione fallita non consuma saldo.
Casi di integrazione
Geometria computazionale in aula
Dimostri ray casting, parità e casi limite di contorno con JSON stabile che include conteggi di incroci per verifica passo per passo.
Domande tecniche
I punti sullo spigolo contano come dentro?
Sì. Se l’interrogazione cade su uno spigolo o un vertice entro una tolleranza numerica minuscola, inside è vero e on_boundary è vero.