6 votos

¿Cómo determinar con eficacia si una colección de coordenadas (polígono) es una elipse?

Estoy tratando de determinar un tipo de geometría basado en una colección de coordenadas y han llegado a través de una situación en la que me gustaría diferenciar entre lo que es un "polígono" y ¿qué es una "elipse". Esta pregunta es específica para ESRI ArcGIS Runtime para WPF 10.1.1 SDK, pero me imagino que esto es lo suficientemente genérica como para tener rodamiento en cualquier SIG. Voy a usar de ESRI API para los ejemplos en este ejemplo.

Dado el siguiente código de ejemplo para generar una elipse es el punto de recogida:

double slice = 2 * Math.PI / 360;
double radiusX = 50;
double radiusY = 20;
        ESRI.ArcGIS.Client.GeometryMapPoint center = new ESRI.ArcGIS.Client.Geometry.MapPoint(0,0);
        ESRI.ArcGIS.Client.Geometry.PointCollection pointCollection = new ESRI.ArcGIS.Client.Geometry.PointCollection();
        for (int angle = 0; angle <= 360; angle += 6)
        {
            double rad = slice * angle;
            double px = center.X + radiusX * Math.Cos(rad);
            double py = center.Y + radiusY * Math.Sin(rad);
            pointCollection.Add(new ESRI.ArcGIS.Client.Geometry.MapPoint(px, py));
        }

Y entonces, dado este ejemplo para generar un polígono en el punto de recogida (obviamente el polígono podría ser mucho más complejo de lo que esta):

ESRI.ArcGIS.Client.Geometry.PointCollection pointCollection = new ESRI.ArcGIS.Client.Geometry.PointCollection();
        pointCollection.Add(new MapPoint(0, 0));
        pointCollection.Add(new MapPoint(0, 10));
        pointCollection.Add(new MapPoint(10, 10));
        pointCollection.Add(new MapPoint(10, 0));
//Close the polygon
pointCollection.Add(pointCollection[0]);

Es allí una manera eficaz, eficiente, y de forma genérica para determinar cual de estas dos formas es una elipse y que no es? El impulso detrás de esto es que el ESRI WPF API de no diferenciar entre Polígonos y puntos suspensivos.

EDIT: tal vez yo pueda hacer esta pregunta más claro, lo que me gustaría a discernir es si los puntos dados constituyen lo que podría considerarse una de 2 Dimensiones de la elipse (tal vez ya se esta haciendo demasiado subjetivo). La elipse puede tener cualquier número de radiales de los puntos que la componen, y me gustaría idealmente determinar si cumple con alguna prueba de la "redondez" o curvatura. El x-radius y y-radio de la muestra de la elipse también podría ser variadas. He editado mi muestra para incluir este.

3voto

M. B. Altaie Puntos 11

Yo tenía un proyecto en el que necesitaba para clasificar geometrías como círculos, elipses, o polígonos irregulares. He encontrado que después de localizar el centro de la figura, fácilmente se podría clasificar en dos coordenadas como "lo más cercano" y "más lejano" punto a ese centro, que luego me permita derivar una posible orientación de la elipse, y su semi-mayor y semi-eje menor. Luego simplemente se calcula la distancia desde el centro a cada uno de los vértices, y lo que el hipotético distancia en la que el ángulo sería si la figura de una elipse. Si la suma de las diferencias entre reales e hipotéticos, dividido por el número de vértices es relativamente pequeña, entonces yo podría clasificar la forma de una elipse, y si semi-mayor era aproximadamente igual a la semi-menor de edad, entonces era un círculo, de lo contrario, era un genérico polígono.

Hubo algunos pequeños florece en la orientación de determinación (usando los dos más cercanos y los dos puntos más lejanos), y posiblemente una raíz cuadrada de la suma de cuadrados en el delta determinación (no tengo acceso al código ya), pero me pareció lo suficientemente confiable sobre los cientos de formas tenía que probar en contra. Tuve una complicación adicional de que las distancias que todos tenían que ser calculado en un esferoide WGS84, sino que incluso se manejan a alta latitud geometrías correctamente. Es, posiblemente, no la solución más eficiente, pero no estaba muy mal, [O(n)], y fue efectiva.

3voto

Sork Puntos 26

Suponiendo que un 2d superficie plana (ya que estos son coordenadas proyectadas).

Donde n es el número de puntos....

Para el caso donde n < 5, que siempre define una elipse. Para cualquiera de los cuatro puntos, se puede construir una elipse que pasa por los cuatro puntos. De hecho, puede haber varias elipses que ir a través de todos los cuatro puntos.

Para n = 5, puede utilizar las coordenadas para resolver la generalización de la sección cónica de ecuación Ax^2 + Bxy + Cy^2 + Dx + Ey + F. la solución de La ecuación puede ser un círculo (A=C B=0) de la elipse (Ax^2 + Bxy + Cy^2 = -F), una parábola o una hipérbola.

Así, la vía de solución es sencilla, aunque no necesariamente fácil. Tome los primeros cinco puntos y resolver para a, B, C, D, E Y F en la generalización de la sección cónica de ecuación. Prueba la solución para ver si Ax^2 + Bxy +Cy^2 = -F para los primeros cinco puntos. Si es así, ahora tienes la ecuación para el potencial de la elipse. Ahora tienes que conectar el resto de coordenadas después de los primeros cinco puntos para probar si la ecuación se sostiene. Si hasta el último coordinar está fuera de la elipse, ya no tiene forma de elipse.

Si todas las coordenadas son válidos para la elipse de ecuación a resolver para a partir de las cinco primeras coordenadas tenemos una elipse. La parte más difícil? La solución de sus cinco ecuaciones con seis incógnitas para obtener su sección cónica de ecuación. Creo que se puede hacer esto con la matriz de las matemáticas de una manera sencilla, pero no estoy seguro de la parte superior de mi cabeza.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X