Если я правильно понял ваш вопрос, теперь вы хотите найти все пиксели, которые l ie на линиях, построенных заданными точками на изображении.
Не совсем уверен, так как набирал текст на смартфоне прямо сейчас, но Я думаю, вы могли бы сделать что-то вроде
// Expects givenPoints in pixel coordinates for positions to draw lines between
public List<Vector2Int> CalculateLinePixels(List<Vector2Int> givenPoints)
{
var output = new List<Vector2Int>();
// Already add the first point once
output.Add(givenPoints[0]);
// start with the second point and calculate the line points back
// between the current and the point before
for (var i = 1; i < givenPoints.Count; i++)
{
var startPoint = givenPoints[i - 1];
var endPoint = givenPoints[i];
// get the difference between them in pixels
var dif = endPoint - startPoint;
// Get the pixel step in Y per pixel step on X
var step = dif.y / (float)dif.x;
// go through all the pixels on the X axis between both points
// excluding the first as these should already match the
// startPoint (== last endPoint)
//
// Note that for now this assumes that the line goes always strict from left to right
// -> no forth and back drawing, no vertical drawing
for (var x = 1; x < dif.x; x++)
{
// every step in X add one step in Y starting from the first points Y
var y = Mathf.RoundToInt(step * x);
// Add the new line point
output.Add(startPoint + new Vector2Int(x, y));
}
}
return output;
}
Как также прокомментировано в коде:
Обратите внимание, что это предполагает, что строка всегда идет строго слева направо. => Нет рисования вперед и назад, без горизонтального рисования.
Для них вы можете добавить некоторые дополнительные проверки, такие как if(dif.x < 0)
, тогда вам нужно будет выполнить итерацию в другом направлении for (var x = -1; x > dif.x ; x--)
. И если это if(dif.x == 0)
, вы, возможно, захотите нарисовать только горизонтальную линию до следующей точки, заполняя все сверху / снизу.
Для получения лучших результатов вы можете изучить алгоритмы рисования линий и реализовать другой способ получения и заливки пикселей по-разному.