Calculadora del perímetro de la envolvente convexa
Esta calculadora halla el menor contorno convexo que encierra un conjunto de puntos cartesianos y suma la distancia euclídea de todas sus aristas en orden.
Ejecutar — gratis
Devuelve tanto el perímetro como los vértices de la envolvente, para que usted pueda revisar, dibujar o reutilizar el resultado. Los puntos duplicados y los situados dentro del contorno no alteran la medida. El cálculo es determinista, no accede a la red y admite hasta 100,000 puntos por solicitud.
Introduzca puntos cartesianos en un sistema coherente
Envíe los puntos como registros con coordenadas numéricas finitas x e y. Todos deben pertenecer al mismo sistema cartesiano y emplear la misma unidad. Si las coordenadas están en metros, el perímetro se expresa en metros; si están en píxeles, se expresa en píxeles. La calculadora no proyecta latitud y longitud ni contempla la curvatura terrestre. Por ello, convierta primero las coordenadas geográficas a una proyección adecuada cuando necesite una distancia física. El orden de entrada no importa, pues el algoritmo ordena las coordenadas antes de construir el contorno. Se admiten coordenadas repetidas y se eliminan a efectos geométricos, aunque la respuesta informa tanto del total recibido como del número de puntos únicos. Debe facilitar al menos un punto y puede enviar hasta 100,000 registros. Conservar la precisión original evita redondeos prematuros. La envolvente comienza en el punto de contorno lexicográficamente menor y avanza en sentido antihorario, de forma estable y reproducible.
Comprenda cómo se obtienen el contorno y el perímetro
La calculadora emplea el método de cadena monótona de Andrew. Tras ordenar y eliminar duplicados, construye una cadena inferior y otra superior. Una prueba de orientación mediante producto cruzado descarta el punto central cuando tres candidatos consecutivos no forman un giro antihorario. Así se excluyen los puntos estrictamente interiores y los puntos intermedios situados sobre una arista recta, y solo quedan los extremos necesarios para describirla. Las dos cadenas se unen sin repetir sus extremos. Después se suma la distancia euclídea entre cada vértice y el siguiente, incluida la arista de cierre desde el último hasta el primero. La ordenación domina el coste y produce una complejidad temporal O(n log n); la construcción posterior es lineal. Con un único punto distinto, el perímetro es cero. Con dos puntos distintos, o si todos son colineales, la envolvente conserva los dos extremos y la convención de contorno cerrado cuenta el segmento en ambos sentidos, por lo que devuelve el doble de la distancia entre ellos.
Interprete el resultado y utilícelo correctamente
El campo perimeter contiene la longitud total del contorno en la misma unidad que las coordenadas. El array hull enumera los vértices conservados en orden de recorrido sin repetir el primero al final. La respuesta incluye además input_points, unique_points y hull_points, que explican por qué no aparecen puntos interiores, repetidos o colineales. Para dibujar el polígono, una usted los vértices consecutivos y cierre explícitamente el último con el primero. Como se usa aritmética de coma flotante de JavaScript, las distancias irracionales pueden mostrar una pequeña aproximación binaria; redondee únicamente para presentar el resultado. La herramienta resulta apropiada para planos, coordenadas de imagen, mallas locales de ingeniería y cartografía proyectada. No calcula perímetros geodésicos esféricos o elipsoidales, no corrige sistemas de referencia equivocados ni conserva puntos colineales solo con fines visuales. Cada solicitud por API cuesta $0.002; la ejecución en el navegador utiliza la misma lógica pura para ofrecer resultados coherentes.
Qué puede hacer con ella
Medir el límite de un terreno
Obtenga el perímetro envolvente de puntos topográficos después de convertirlos a una proyección local adecuada.
Estimar un cerramiento protector
Calcule la valla o envoltura convexa más corta que contiene todas las ubicaciones de un conjunto plano.
Resumir una huella espacial
Genere un contorno ordenado y su longitud para agrupaciones, rasgos de imagen, partículas simuladas o coordenadas CAD.
Preguntas frecuentes
¿Cuánto cuesta una solicitud?
Cada solicitud por API cuesta $0.002. La capacidad también se ejecuta localmente en el navegador.
¿Se admiten directamente latitud y longitud?
Puede introducirlas como números, pero el resultado estaría en grados y no sería una distancia física fiable. Proyecte los datos geográficos antes del cálculo plano.
¿Qué ocurre con los puntos duplicados e interiores?
Los duplicados se eliminan y los interiores quedan fuera de la envolvente. La respuesta cuenta por separado los puntos recibidos, únicos y de contorno.
¿Cómo se tratan los puntos colineales?
Solo permanecen los dos extremos. El segmento se cuenta dos veces porque el contorno degenerado realiza el trayecto de ida y vuelta.
¿Se repite el primer vértice al final?
No. El array de la envolvente incluye una sola vez cada vértice; la arista de cierre hasta el primero es implícita y sí forma parte del perímetro.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"points": [
{
"x": 0,
"y": 0
},
{
"x": 4,
"y": 0
},
{
"x": 4,
"y": 3
},
{
"x": 0,
"y": 3
},
{
"x": 2,
"y": 1
}
]
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "geo.convex_hull_perimeter",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_items | 100000 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |