Рабочие будни

Архивы

Все наши массажеры для тела обеспечиваются 3- летней гарантией. . доставка цветов Краснодар . Samsung S8000 Jet купить возможно во всех интернет-магазинах России. . Высококачественные купить кондиционер в киеве все для вашего комфорта.  

Разбор ломаной на мелкие отрезки

Предположим что существует некий массив из координат отрезков составляющих какую то ломанную линию.
Требуется разбить эту линию на более мелкие отрезки. Зачем? Да мало ли, мне вот понадобилось.

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;
}

Такая вот теорема для критики. Если есть кому что добавить, то вэлком.

Leave a Reply