La respuesta corta es: no se puede hacer de otro polígono de eso, y tengo demasiado tiempo libre en mis manos. El ligeramente más largo, la respuesta es que podemos tomar la derivada de una función a partir de los puntos a distancias. El uso de la programación lineal, nos muestran que no podemos tener todas las distancias parciales ser no positivo, lo que significa que no puede ser que todas las no-creciente; esto es exactamente la condición de que ninguna de las partes, o azul diagonal puede obtener más tiempo.
Deje $P$ ser un polígono definido por esta lista ordenada de los puntos de $A, a, B, b, C, c, D, d$. Superior-caso-de la carta de los puntos son el "exterior" de los puntos, inferior-caso-de la carta de los puntos son el "interior" de puntos.
Supongamos que tenemos un mapa ocho arbitraria de dos coordenadas de los puntos a los dieciséis distancias de los lados y diagonales. (Voy a estar haciendo caso omiso de los ocho diagonales entre el exterior y no contiguos de los puntos interiores, porque somos capaces de resolver este problema sin ellos.) Deje $\mu$ ser nuestra función de distancia $\mu : \mathbb{R}^{16} \to \mathbb{R}^{16}$, tal que:
- $\mu_1$: La distancia desde la $A$$C$.
- $\mu_2$: La distancia desde la $B$$D$.
- $\mu_3$: La distancia desde la $A$$a$.
- $\mu_4$: La distancia desde la $a$$B$.
- $\mu_5$: La distancia desde la $B$$b$.
- $\mu_6$: La distancia desde la $b$$C$.
- $\mu_7$: La distancia desde la $C$$c$.
- $\mu_8$: La distancia desde la $c$$D$.
- $\mu_9$: La distancia desde la $D$$d$.
- $\mu_{10}$: La distancia desde la $d$$A$.
- $\mu_{11}$: La distancia desde la $a$$c$.
- $\mu_{12}$: La distancia desde la $b$$d$.
- $\mu_{13}$: La distancia desde la $a$$b$.
- $\mu_{14}$: La distancia desde la $a$$d$.
- $\mu_{15}$: La distancia desde la $b$$c$.
- $\mu_{16}$: La distancia desde la $c$$d$.
Aquí son la constante de la cruz-las diagonales y el lado distancias.
Y aquí están los interiores de punto de las diagonales que estamos modelando.
Derivar la ecuación, y se obtiene el Jacobiano. Vamos a examinar a la derivada, pero dividida, ya que sólo se preocupan por el positivo y el negativo de la derivada. También te hacen la vida más fácil cuando vamos a resolver esto.
$$D\mu/2 = \left[\frac{\partial \mu}{\partial A_x}\ \frac{\partial \mu}{\partial A_y}\frac{\partial \mu}{\partial a_x}\ \frac{\partial \mu}{\partial a_y} \cdots \frac{\partial \mu}{\partial d_x}\ \frac{\partial \mu}{\partial d_y}\right]$$
Each of those $\parcial\mu$ derivatives is actually a column.
For the sake of a proper derivative, I'm going to insert a variable $t$; you can intuitively think of this as time if you want, and the polygon like it's sorta moving. Whatever. It's just there to make things more formal. We want $\frac{\partial \mu_i}{\partial t},$ dependent on some "movement derivatives" $\frac{\partial Point_c}{\partial t}$, like we're moving the point around. We get to choose the movement derivatives, and our goal is to choose them so that the distances either stay equal or decrease as we move our points. From the derivative equation, we know that:
$$\frac{\partial \mu_i}{\partial t} = \frac{\partial \mu_i}{\partial A_x}\frac{\partial A_x}{\partial t} + \cdots \frac{\partial \mu_i}{\partial d_y}\frac{\partial d_y}{\partial t}$$
So it's really like multiplying our matrix by a variable vector. Turns out, the matrix is pretty sparse.
What does each of these listings look like? For instance, in $\mu_1$, we get this equation:
$$\frac{\partial \mu_1}{\partial t} = (A_x - C_x)\frac{\partial A_x}{\partial t} + (A_y - C_y)\frac{\partial A_y}{\partial t} + (C_x - A_x)\frac{\partial C_x}{\partial t} + (C_y - A_y)\frac{\partial C_y}{\partial t}$$
At this point, I think it's a good idea to define our particular polygon. I found that these points describe the polygon well: $[(29, 51), (44, 127) (0, 218) ,(86, 185) ,(197, 282 ),(170, 169),(212, 0),(113, 59)]$. Remember, these are for the points $a, a, B, b, C, c, D, d$. I have a link below to plot this polygon, and you can check that it correctly "looks like" the original polygon in this problem, or is at least some acceptable approximation.
Given these polygon points, we can substitute actual numbers in the derivative now. Then we get:
$$\frac{\partial \mu_1}{\partial t} = -168\frac{\partial A_x}{\partial t} -231\frac{\partial A_y}{\partial t} + 168\frac{\partial C_x}{\partial t} + 231\frac{\partial C_y}{\partial t}$$
Hey, this looks like a linear equation! In that case, let Ax
stand for $\frac{\partial A_x}{\partial t}$ in the following code listing.
max: Ax - ax + Ay - ay + Bx - bx + By - by + Cx - cx + Cy - cy + Dx - dx + Dy - dy;
r_Ax: Ax = 0;
r_Ay: Ay = 0;
r_Cx: Cx = 0;
r_Cy: Cy = 0;
r_1: -168 Ax -231 Ay +168 Cx +231 Cy = 0;
r_2: -212 Bx +218 By +212 Dx -218 Dy = 0;
r_3: -15 Ax -76 Ay +15 ax +76 ay <= 0;
r_4: +44 ax -91 ay -44 Bx +91 By <= 0;
r_5: -86 Bx +33 By +86 bx -33 by <= 0;
r_6: -111 bx -97 by +111 Cx +97 Cy <= 0;
r_7: +27 Cx +113 Cy -27 cx -113 cy <= 0;
r_8: -42 cx +169 cy +42 Dx -169 Dy <= 0;
r_9: +99 Dx -59 Dy -99 dx +59 dy <= 0;
r_10: +84 dx +8 dy -84 Ax -8 Ay <= 0;
r_11: -126 ax -42 ay +126 cx +42 cy <= 0;
r_12: -27 bx +126 by +27 dx -126 dy <= 0;
r_13: -42 ax -58 ay +42 bx +58 by <= 0;
r_14: -69 ax +68 ay +69 dx -68 dy <= 0;
r_15: -84 bx +16 by +84 cx -16 cy <= 0;
r_16: +57 cx +110 cy -57 dx -110 dy <= 0;
free Ax, Ay, Bx, By, Cx, Cy, Dx, Dy, ax, ay, bx, by, cx, cy, dx, dy;
This is the LP File format for the system of linear equalities that we're trying to solve. A couple things to note here:
-
Why are the derivatives for the points $$ and $C$ set to $0$? When I was running the
lp_solver
, I noticed it tended to give solutions that were just the original polygon, but translated or rotated. Without loss of generality, we can fix one of the constant diagonals in place. I chose the $CA$ diagonal.
-
¿Por qué las otras ecuaciones igual a cero? Constante derivado significa que la ecuación no se mueve. Hemos querido mantener esas diagonales constante, por lo que establecer los derivados a cero.
-
Qué hay de las otras desigualdades? Queríamos que no aumentando las distancias, si eran laterales o diagonales. Eso significa que sus derivados debe ser menor o igual a cero.
-
¿Por qué es todo lo que aparece como
free
en la parte inferior? En la lp_solver
programa, las variables no aparece como free
tendrá sobre la no-valores negativos. Por el contrario, free
variables tienen sobre todos los posibles valores reales, incluyendo valores negativos. Puedes leer más aquí.
El uso de la lp_solver
programa, ponche de ese archivo como entrada. Usted obtendrá cero para todo; ninguno de los puntos se pueden mover. Reemplace la función objetivo con max: bx
o min: bx
. Usted obtendrá cero, lo que significa que el cero es la única solución. En otras palabras, si intenta cualquier otro punto, te voy a romper uno de nuestros programación lineal restricciones.
Supongamos que sólo se llevaron los primeros doce distancia de ecuaciones, es decir, sólo la cruz diagonales para los puntos interiores. En ese caso, hacemos llegar a una solución. Es ilimitado, así que tome una desigualdad como este:
r_100: Ax - ax + Ay - ay + Bx - bx + By - by + Cx - cx + Cy - cy + Dx - dx + Dy - dy <= 50;
y anexarlo al final de la lp archivo de listado. Cuando se ejecute la lp_solver programa, obtenemos un vector solución para nuestros derivadas parciales, que cuando se añade a los puntos originales produce esta secuencia de puntos: $[(29, 51),(41.71038, 127.451899),(14.5611, 226.59952),(93.82524, 176.04534),(197, 282),(167.6759, 169.555315),(221.24608, 3.43074),(113.992273, 48.5811)]$. Comparar que forma con nuestra forma original va por aquí. Copiar/pegar el texto a continuación y haga clic en "Cargar" para ver las formas. La nueva forma es a la izquierda en rojo, la forma antigua está a la derecha en amarillo.
{ "position": "0 0",
"model": { "class": "go.GraphLinksModel",
"nodeDataArray": [
{"fill":"yellow", "stroke":"blue", "strokeWidth":3, "category":"PolygonDrawing", "key":-2, "geo":"F M29 51 L44 127 L0 218 L86 185 L197 282 L170 169 L212 0 L113 59z", "loc":"532.25 247.25"},
{"fill":"red", "stroke":"green", "strokeWidth":3, "loc":"226 188", "category":"PolygonDrawing", "geo":"F M29 51 L41.71038 127.451899 L14.5611 226.59952 L93.82524 176.04534 L197 282 L167.6759 169.555315 L221.24608 3.43074 L113.992273 48.5811z", "key":-1}
],
"linkDataArray": []} }
Me he tomado las coordenadas y la comparación de la diferencia entre las distancias de los dos. Resulta, no es exactamente correcto; se desvía del original polígono por alrededor de tres unidades. Las mayores desviaciones se entre $a$ $B$ (a distancia $101.0791769$ unidades en el original, en comparación con $102.7975396$ en el nuevo) y $B$ $b$ (a distancia $92.11405973$ en el polígono original, en comparación con $94.01345119$ en el nuevo). Yo le atribuye esto a numérica de problemas de estabilidad.
Un par de preguntas que siguen:
-
Lo que si quiero probar con otro polígono? Es muy simple. Se puede sustituir la diferencia en los puntos de coordenadas para cualquier conjunto de coordenadas de un punto. A continuación, ejecute cualquiera de programación lineal solver te gusta, y a ver qué sale. Me imagino, para esta configuración, probablemente será cero, independientemente de la función objetivo.
-
Puede resolver esto por un genérico polígono que "se parece a" el uno en el estado de cuenta? La pregunta a resolver este polígono $P$, no necesariamente para cualquier polígono $P$ que parece. A continuación, de nuevo, dando un ejemplo particular y la solución no es realmente en el espíritu de la pregunta. ¿Qué podemos hacer para que el dieciséis punto de coordenadas en variables libres? El mejor que he encontrado, por ahora, es teniendo en cuenta todos los de la izquierda-de las relaciones. Dados tres puntos de $A, B, C$, el punto de $C$ está a la izquierda de la línea de $AB$ si $A_xB_y + B_xC_y + C_xA_y - A_xC_y - C_xB_y - B_xA_y < 0$. Por desgracia, eso no es una desigualdad lineal.