Test di convessità del poligono
Il rettangolo (0, 0), (4, 0), (4, 3), (0, 3) è convesso: ogni angolo gira dallo stesso lato, in senso antiorario. La punta di freccia (0, 0), (3, 1), (0, 2), (1, 1) alterna svolte a sinistra e a destra, quindi è concava. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Un test di convessità del poligono risponde a una domanda fondamentale della geometria computazionale: dato un anello ordinato di vertici cartesiani, ogni angolo interno resta al più pari a centottanta gradi in modo che la forma non si infossi mai verso l'interno? I geometri che convalidano particelle catastali, gli sviluppatori di giochi che definiscono scafi di collisione, i team GIS che puliscono poligoni di geofence, gli esportatori CAD che impongono vincoli di convessità e gli strumenti didattici che valutano esercizi su poligoni semplici necessitano di una risposta deterministica sì o no senza erigere un'intera libreria geometrica. Questa capacità accetta un elenco ordinato di vertici, percorre l'anello chiuso una sola volta e confronta il prodotto vettoriale bidimensionale di ogni coppia di spigoli consecutivi. Quando ogni prodotto vettoriale non nullo condivide lo stesso segno, ogni svolta va nello stesso senso e il poligono è convesso; segni misti indicano almeno un angolo rientrante e il poligono è concavo. I prodotti vettoriali nulli segnano vertici collineari e sono ammessi senza rompere la convessità.
Come i prodotti vettoriali di spigoli consecutivi decidono la convessità
Etichetti i vertici ordinati da V zero a V n meno uno e chiuda l'anello trattando lo spigolo dall'ultimo vertice al primo come presente anche quando chi chiama non ripete il punto iniziale. In ogni vertice B con vertice precedente A e successivo C, formi i vettori uscenti da A a B e da B a C. Il loro prodotto vettoriale bidimensionale è lo scalare z uguale a (B.x meno A.x) per (C.y meno B.y) meno (B.y meno A.y) per (C.x meno B.x).
Il segno di z è la direzione di svolta in B: positivo per una svolta a sinistra quando il piano è orientato con y in alto e x a destra (percorso antiorario del contorno), negativo per una svolta a destra (percorso orario) e zero quando A, B e C sono collineari.
Un poligono semplice è convesso se e solo se ogni svolta non nulla condivide lo stesso segno, il che significa che ogni angolo interno è al più di centottanta gradi e il contorno non inverte mai il senso di rotazione. Svolte positive e negative miste dimostrano un angolo interno rientrante da qualche parte sull'anello, quindi il poligono è concavo. L'algoritmo è strettamente O(n) nel numero di vertici dopo un unico passaggio di normalizzazione che elimina un duplicato finale del primo punto quando chi chiama ha già chiuso l'anello.
Quando conviene verificare la convessità
Le pipeline di mappatura e GIS usano un test di convessità del poligono prima di algoritmi che assumono ingresso convesso — ritaglio contro una finestra convessa, scomposizione di regioni complesse o alimentatori di solver che rifiutano vertici rientranti. Motori di gioco e simulazione convalidano maglie di collisione definite dai designer affinché un solo avvallamento non rompa poi ipotesi di assi di separazione o GJK. Esportatori CAD e di produzione impongono vincoli di convessità su grezzi e poligoni di supporto prima di inviare la geometria a un utensile di taglio.
Piattaforme educative valutano voci «questo poligono è convesso?» con un oracolo deterministico che tratta in modo coerente i vertici collineari a metà spigolo invece di affidarsi all'occhio. La convalida fallita non consuma saldo.
Casi d'uso
Convalida di geofence e particelle GIS
Rifiuti o segnali anelli catastali e di geofence concavi prima di pipeline che assumono poligoni convessi per ritaglio, buffer o routine di area.
Controlli di scafo di collisione nei giochi
Convalidi poligoni di collisione 2D definiti dai designer affinché gli algoritmi dipendenti dalla convessità non ricevano mai uno scafo ammaccato a runtime.
Valutazione automatica in aula ed esami
Valuti voci «questo poligono è convesso?» con un oracolo deterministico di prodotti vettoriali allineato alle definizioni di direzione di svolta dei manuali.
Domande frequenti
Come si verifica se un poligono è convesso?
Invii vertici ordinati come coppie {x, y} o [x, y] (almeno tre).
Cosa succede se alcuni vertici consecutivi sono collineari?
I prodotti vettoriali nulli sono ammessi. I punti collineari a metà spigolo non rompono da soli la convessità; solo svolte miste a sinistra e a destra segnano un poligono concavo.
L'ordine dei vertici (orario o antiorario) conta?
Qualsiasi orientamento coerente va bene. La risposta riporta orientation come clockwise o counterclockwise quando è convesso, e mixed quando le svolte non coincidono.
Cosa succede con meno di tre vertici?
Un test di convessità del poligono richiede almeno tre vertici; l'ingresso non valido non viene fatturato.
Cosa indica il risultato oltre al sì o al no?
Indica il verso di rotazione dell'anello: antiorario, orario, misto per una figura concava, oppure allineato quando tutti i punti stanno su una retta. Conta anche le svolte reali e i vertici in cui il contorno prosegue dritto.
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/polygon-is-convex \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"vertices":[{"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/polygon-is-convex", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"vertices": [
{
"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/polygon-is-convex",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"vertices": [
{
"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/polygon-is-convex", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"vertices":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"vertices":[{"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/polygon-is-convex", 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
{
"vertices": [
{
"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.polygon_is_convex",
"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 i prodotti vettoriali di spigoli consecutivi decidono la convessità
Quando ogni prodotto vettoriale è zero i vertici giacciono su una sola retta; la forma non ha area e questo endpoint riporta is_convex false con orientation collinear invece di inventare uno scafo convesso.
Contratto di ingresso, forma della risposta e comportamento di errore
Un vertice finale identico al primo viene eliminato automaticamente, così funzionano sia anelli chiusi in stile GeoJSON sia elenchi aperti di aula. Esempio: il quadrato (0,0), (4,0), (4,3), (0,3) è convesso con orientamento antiorario. Invii in POST un corpo JSON con un campo obbligatorio: vertices, un array ordinato di almeno tre punti. Ogni punto può essere un oggetto con x e y finiti (o alias lon e lat) oppure un array di due elementi [x, y]. Gli alias points, polygon e coords sono accettati con lo stesso significato così che i payload GIS esistenti si integrino senza rinominare. Meno di tre vertici dopo quella normalizzazione, payload che non sono array, coordinate mancanti e numeri non finiti falliscono con invalid_input e non vengono fatturati. In caso di successo il corpo include is_convex come booleano; n come conteggio normalizzato dei vertici; orientation come counterclockwise, clockwise, mixed o collinear; turn_count come numero di svolte non nulle; zero_turns come conteggio collineare; una stringa formula che riformula l'identità del prodotto vettoriale; e vertices ecoati come oggetti {x, y} nell'ordine dell'anello. La freccia concava (0,0), (3,1), (0,2), (1,1) mescola i segni di svolta e restituisce is_convex false. Abbini il booleano al Suo codice di disegno se Le serve uno schizzo; questo endpoint classifica solo la convessità e non emette grafici, scafi né triangolazione.
Dove un'API di convessità del poligono genera valore concreto
Poiché l'implementazione è pure parse di livello A, ogni chiamata riuscita costa il prezzo base pubblicato $0.002 senza token di modello né rete in uscita. Mantenga anelli modesti, fissi is_convex e orientation nei test e otterrà etichette di convessità riproducibili per geofence, controlli di aula e worker all'edge senza distribuire un'intera pila di geometria computazionale propria.
Domande tecniche
Quanto costa il test di convessità del poligono?
Lo strumento nel browser è gratuito. Le richieste API usano il saldo prepagato KIT a $0.002 per chiamata riuscita; l'ingresso non valido non viene fatturato.