Разбор ломаной на мелкие отрезки
Предположим что существует некий массив из координат отрезков составляющих какую то ломанную линию.
Требуется разбить эту линию на более мелкие отрезки. Зачем? Да мало ли, мне вот понадобилось.
private ArrayList breakLines (ArrayList aV) //на входе массив координат
{
int snap=200; //требуемое количество отрезков на выходе
ArrayList tPixel = new ArrayList (); //новый массив координат для возврата
ArrayList aPixel = new ArrayList (); //временный массив координат
Point obj1 = new Point ();
int b=0;
foreach (Point obj in aV)
{
if (b != 0)
{
float x1 = obj1.X;
float y1 = obj1.Y;
float x2 = obj.X;
float y2 = obj.Y;
//Алгоритм DDA-линии
int L = (int) Math.Max (Math.Abs (x2 — x1), Math.Abs (y2 — y1));
float dX = (x2 — x1) / L;
float dY = (y2 — y1) / L;
aPixel.Add (new Point ((int) x1, (int) y1)); //Начальную точку в массив
for (int i = 0; i < L; i++)
{
x1 = (x1 + dX);
y1 = (y1 + dY);
aPixel.Add (new Point ((int) x1,(int) y1)); //Следующую точку в массив
}
//aPixel.Add (new Point ((int) x2, (int) y2)); // Можно раскомментировать если требуется дублирование каждой последней точки в отрезке
}
obj1 = obj;
b++;
}
for (int i=0;i<snap;i++) tPixel.Add (aPixel[(int)(aPixel.Count*i/snap)]);
return tPixel;
}
Такая вот теорема для критики. Если есть кому что добавить, то вэлком.