Necesita las coorderadas de innerPolygon

Digamos que tengo este diagtwig,

enter image description here

Dado que tengo todas las coorderadas del polígono externo y la distancia entre el polígono interno y externo también se da d. ¿Cómo calcular las coorderadas internas del polígono? Editar: Pude resolver el problema obteniendo los puntos medios de todas las líneas. Desde estos puntos medios puedo mover la distancia d, así que puedo get tres puntos. No, tengo 3 puntos y 3 pendientes. A partir de esto, puedo get tres ecuaciones nuevas. Simultáneamente, resolver la ecuación obtiene los 3 puntos.

Marcha hacia la izquierda en la lista de bordes Marcha hacia la izquierda en la list de bordes. Para cada Pi-Pi + 1 borde, proyecte Pi y Pi + 1 hacia dentro a través de la perpendicular en la línea Pi_Pi + 1. Use una verificación de medio espacio positivo / negativo simple para get la dirección correcta hacia adentro. ( vectores perpendiculares en 2D , medio plano positivo / medio plano negativo ).

Una vez que calcula la línea Pi_Pi + 1 que normalmente se desplaza, puede verificar su intersección con su línea homóloga Pi + 1_Pi + 2 normalmente desplazada. La intersección se llama P'i + 1 y es un vértice del polígono requerido.

Tenga en count que el set de puntos que están d unidades lejos del polígono inicial y se encuentran dentro de su polígono no forman un polígono, forman una polilínea de "esquina networkingondeada". Tenga en count el pequeño círculo que dibujé. El arco entre los dos radios verde y azul es parte de este set. Pero el polígono que obtienes es una aproximación "decente".

Sé que esto ya ha sido respondido, pero creo que el siguiente código puede ser útil para los lectores que buscan una implementación de la solución.

// This function is a bit tricky. Given a path ABC, it returns the // coordinates of the outset point facing B on the left at a distance // of 64.0. // M // - - - - - - X // ^ / ' // | 64.0 / ' // X---->-----X ==> X--v-------X ' // AB \ AB \ .>' // \ \<' 64.0 // \ \ . // \ \ . // CXCX // FTPoint FTContour::ComputeOutsetPoint(FTPoint A, FTPoint B, FTPoint C) { /* Build the rotation matrix from 'ba' vector */ FTPoint ba = (A - B).Normalise(); FTPoint bc = C - B; /* Rotate bc to the left */ FTPoint tmp(bc.X() * -ba.X() + bc.Y() * -ba.Y(), bc.X() * ba.Y() + bc.Y() * -ba.X()); /* Compute the vector bisecting 'abc' */ FTGL_DOUBLE norm = sqrt(tmp.X() * tmp.X() + tmp.Y() * tmp.Y()); FTGL_DOUBLE dist = 64.0 * sqrt((norm - tmp.X()) / (norm + tmp.X())); tmp.X(tmp.Y() < 0.0 ? dist : -dist); tmp.Y(64.0); /* Rotate the new bc to the right */ return FTPoint(tmp.X() * -ba.X() + tmp.Y() * ba.Y(), tmp.X() * -ba.Y() + tmp.Y() * -ba.X()); }