Calculateur du périmètre de l’enveloppe convexe
Ce calculateur détermine le plus petit contour convexe qui renferme un ensemble de points cartésiens, puis additionne la longueur euclidienne de ses arêtes dans l’ordre.
Lancer gratuitement
Il renvoie le périmètre et les sommets de l’enveloppe afin que vous puissiez contrôler, tracer ou réutiliser le résultat. Les doublons et les points intérieurs ne gonflent pas la mesure. Le calcul est déterministe, ne requiert aucun accès réseau et accepte jusqu’à 100,000 points par requête.
Fournissez des points cartésiens dans un référentiel cohérent
Transmettez les points sous forme d’enregistrements comportant des coordonnées numériques finies x et y. Tous les points doivent partager le même référentiel cartésien et la même unité. Si les coordonnées sont en mètres, le périmètre est exprimé en mètres ; si elles sont en pixels, il est exprimé en pixels. Le calculateur ne projette pas la latitude et la longitude et ne tient pas compte de la courbure terrestre. Convertissez donc d’abord les données géographiques vers une projection adaptée si vous recherchez une distance physique. L’ordre de saisie est sans incidence, car l’algorithme trie les coordonnées avant de construire le contour. Les coordonnées répétées sont acceptées puis éliminées pour le calcul géométrique, tandis que la réponse indique le nombre initial et le nombre de points uniques. Un point au minimum est obligatoire, dans la limite de 100,000 enregistrements. Conserver la précision d’origine évite un arrondi prématuré. L’enveloppe part du plus petit point frontalier dans l’ordre lexicographique et progresse dans le sens antihoraire, ce qui garantit une représentation stable et reproductible.
Comprenez le calcul du contour et du périmètre
Le calculateur applique la méthode de la chaîne monotone d’Andrew. Après le tri et la suppression des doublons, il construit une chaîne inférieure et une chaîne supérieure. Un test d’orientation fondé sur le produit vectoriel retire le point central lorsque trois candidats consécutifs ne décrivent pas un virage antihoraire. Les points strictement intérieurs et les points intermédiaires placés sur une arête droite sont ainsi écartés ; seuls demeurent les points extrêmes nécessaires pour décrire cette arête. Les deux chaînes sont assemblées sans répéter leurs extrémités. Le périmètre correspond ensuite à la somme des distances euclidiennes entre chaque sommet et le suivant, y compris l’arête qui relie le dernier au premier. Le tri domine le temps de calcul et donne une complexité O(n log n), tandis que la construction qui suit est linéaire. Avec un seul point distinct, le périmètre vaut zéro. Avec deux points distincts, ou un ensemble entièrement colinéaire, l’enveloppe conserve les deux extrémités et la convention du contour fermé compte le segment dans les deux sens, soit deux fois leur distance.
Interprétez et exploitez le résultat correctement
Le champ perimeter indique la longueur totale du contour dans la même unité que les coordonnées. Le tableau hull répertorie les sommets retenus dans l’ordre de parcours sans répéter le premier à la fin. La réponse contient également input_points, unique_points et hull_points, afin d’expliquer l’absence des points intérieurs, répétés ou colinéaires. Pour dessiner le polygone, reliez les sommets voisins et fermez explicitement le dernier sur le premier. Le calcul reposant sur l’arithmétique flottante de JavaScript, les distances irrationnelles peuvent présenter une légère approximation binaire ; n’arrondissez que lors de l’affichage. Cet outil convient aux plans, coordonnées d’image, grilles d’ingénierie locales et données cartographiques projetées. Il ne calcule pas de périmètre géodésique sphérique ou ellipsoïdal, ne corrige pas un référentiel erroné et ne conserve pas les points colinéaires à des fins purement visuelles. Une requête API coûte $0.002 ; l’exécution dans le navigateur emploie la même logique pure pour assurer des résultats cohérents.
Cas d’usage
Mesurer la limite d’un terrain
Déterminez le périmètre englobant de points de relevé après leur conversion dans une projection locale appropriée.
Estimer une enceinte protectrice
Calculez la clôture ou l’enveloppe convexe la plus courte contenant toutes les positions d’un ensemble plan.
Résumer une emprise spatiale
Obtenez un contour ordonné et sa longueur pour des groupes, éléments d’image, particules simulées ou coordonnées CAD.
Questions fréquentes
Quel est le prix d’une requête ?
Chaque requête API coûte $0.002. La capacité s’exécute également localement dans le navigateur.
Peut-on utiliser directement latitude et longitude ?
Vous pouvez les saisir comme nombres, mais le résultat serait en degrés et non en distance physique fiable. Projetez les données avant le calcul plan.
Que deviennent les doublons et les points intérieurs ?
Les doublons sont supprimés et les points intérieurs exclus. La réponse compte séparément les points reçus, uniques et frontaliers.
Comment les points colinéaires sont-ils traités ?
Seules les deux extrémités subsistent. Le segment est compté deux fois, car le contour dégénéré effectue un aller-retour.
Le premier sommet est-il répété à la fin ?
Non. Le tableau de l’enveloppe contient chaque sommet une fois ; l’arête de fermeture vers le premier est implicite et comprise dans le périmètre.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/geo/convex-hull-perimeter \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3},{"x":2,"y":1}]}'const res = await fetch("https://api.kit.forhosting.com/geo/convex-hull-perimeter", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
},
{
"x": 2,
"y": 1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/geo/convex-hull-perimeter",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
},
{
"x": 2,
"y": 1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/geo/convex-hull-perimeter", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3},{"x":2,"y":1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"points":[{"x":0,"y":0},{"x":4,"y":0},{"x":4,"y":3},{"x":0,"y":3},{"x":2,"y":1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/geo/convex-hull-perimeter", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
},
{
"x": 2,
"y": 1
}
]
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.convex_hull_perimeter",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_items | 100000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |