Ну, я сейчас пытаюсь переместить список точек, используя его центр в качестве ориентира с желаемым смещением.Но у меня проблемы.
Я реализовал текущую функцию:
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);
}
}
Примечание: Point
класс - это собственная реализация, очень похожая на System.Drawing.Point
.
Я вычисляю нормаль (направление между центром и текущей точкой), затем умножаю на величину и смещение.
И вот как я это называю:
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
Но я получаю эту "жирную форму":
Красные пиксели - это тесты, которые яdo.
Черные пиксели - это форма.
Синие пиксели - это переведенные пиксели.
Но, как вы можете видеть, он не пропорционален оси X / Y.
Я следовал этим двум ответам:
Пропорциональный перевод
Учитывая начальную и конечную точку и расстояние, вычислите точку вдоль линии
Но в первом ответе мне не хватает класса Matrix для Unity3D.
Итак, яне знаю, что я скучаюг.