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

Архивы

lg gs290 цена . картину купить на galleryofartists.ru . Сотни товаров на продажу интернет магазин, открыточная продукция открытки оптом. . Мы вам поможем удаление пигментных пятен скидки постоянным клиентам. . Каталог товаров ДИОКСИДИН N10.  

Archive for августа 12, 2009

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

Среда, августа 12, 2009

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

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

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