¿Traducir / transformar? lista de puntos desde su centro con un desplazamiento / distancia

Bueno, actualmente estoy tratando de mover una lista de puntos usando su centro como referencia con un desplazamiento deseado. Pero estoy teniendo problemas.

He implementado la función actual:

    public static IEnumerable<Point> Translate(this IEnumerable<Vector2> points, float offset, Vector2 pivot)
    {
        foreach (Vector2 v in points)
        {
            float magnitude = (v - pivot).magnitude;
            Vector2 n = (v - pivot).normalized;

            Vector2 _v = n * (magnitude + offset) + pivot;
            yield return new Point(_v);
        }
    }

Nota Point class es una implementación propia muy similar aSystem.Drawing.Point.

Calculo la normalidad (la dirección entre el centro y el punto actual), luego multiplico por la magnitud y el desplazamiento.

Y así es como lo llamo:

        Polygon pol = File.ReadAllText(PolyPath).Deserialize<Polygon>();

        Point[] ps = pol.Vertices.Select(v => (v - pol.Position) + offset).ToArray();

        var textureCenter = new Vector2(tex.Width / 2, tex.Height / 2); // This is 221 / 2 & 137 / 2
        var es_incr = ps.Select(p => (Vector2)p).Translate(effectDistance.x, textureCenter).ToList();

       // Then I draw es_incr using Bresenham algorithm: https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm

Pero obtengo esta "forma gorda":

Los píxeles rojos son pruebas que estoy haciendo.

Pixeles negros es la forma.

Los píxeles azules son los píxeles traducidos.

Pero como puede ver, no es proporcional en el eje x / y.

He seguido estas dos respuestas:

Traducción proporcional

Dado un punto inicial y final, y una distancia, calcule un punto a lo largo de una línea

Pero en la primera respuesta me falta la clase Matrix en Unity3D.

Entonces, no sé lo que me estoy perdiendo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta