Непрямоугольные динамические массивы

Они еще зубчатыми по моему называются. Можно ли создавать? Или как хранить координаты вершин нескольких n-угольников, n-разное, соответственно…

если я правильно тебя понял то array of array of PointF;

их не получится создать как то в 1 строчку вроде new PointF[n,m];, только через SetLength;

var a:array of array of PointF;
SetLength(a,3);
a[0] := new PointF[3](new PointF(-1,-1), new PointF(1,-1),new PointF(0,0.5));
...

лучше пиши такое в помощь новичкам

Разобрался, спасибо. Про зубчатые массивы мало что можно нарыть. Поиск в сети только на С выводит. Я с инициализацией путался и уже думал, что АВС их не поддерживает. Вроде так удобно их создавать если размерность заранее не известна.

Uses GraphABC; Var Lines : Array of Array of point; i,n : byte;

Begin // … Определяются размерности и кол-во объектов n:=10; // кол-во многоугольников SetLength(Lines,n); For i:=0 to n-1 Do SetLength(Lines[i],3+random(0,2)); //строка хранит координаты вершин от треугольника End; // до пятиугольника, параметры .x .y можно использовать

лучше n константой и инициализировать массив с new for var i := 0 to n-1 do Lines[i] := new Point[3+Random(3)];

ну и так же i в цикле объявлять а то будет выдавать предупреждение, через годик-2 собираются вообще запретить, и Random(0,2) это тоже самое Random(3), так же как и с new делает тоже самое но в меньше действий

и когда пишешь код используй знаки `(там где ё, только в англ раскладке) как кавычки, по 1 с обоих сторон если код в 1 строчку и по 3 если в несколько строчек, читабельнее становится

function PntF(x,y: real) := new PointF(x,y);

var a:array of array of PointF;
SetLength(a,3);
a[0] := Arr(PntF(-1,-1),PntF(1,-1),PntF(0,0.5));
...

или

function PntF(x,y: real) := new PointF(x,y);

var a := Arr(Arr(PntF(-1,-1),PntF(1,-1),PntF(0,0.5)),
             Arr(PntF(-1,-1),PntF(1,-1)),
             Arr(PntF(-1,-1),PntF(1,-1),PntF(0,0.5),PntF(0,2)));
...
1 лайк

Ага, спасибо. Вы меня так скоро программировать научите… Наглость конечно, но если Вам не лень. А ежели
информация о координатах вершин поступает в процессе выполнения задачи. Т. е. точка 1 уже посчитана, а остальные еще нет и кол-во последующих точек для многоугольника пока неизвестно. Как заносить координаты уже определенных точек в соответствующий массив.у которого пока нет макс длины. Напомню, создается массив многоугольников, их кол-во заранее задано, а кол-во их вершин различно и координаты вершин вычисляются, а не задаются. Хотя бы направление мысли… Можно конечно вначале все посчитать, а потом сформировать массивы (я так уже сделал), но вроде лишний круг выходит

a[n][m] := PntF(x,y)

Кстати наглось тут не при чём, подсказать всегда рады, но самому учится думать надо, если будешь пробовать выполнять сложные проекты, тем более зарабатывать на этом то придётся ради крохи инфы облазить пару десятков страницу по разным форумам, если повезёт… у меня ща с текстом в OpenGL так :slight_smile:

Ну если только направление:

var a := new List<List<PointF>>;
a.Add<new List<PointF>>;
a[0] += PntF(-1,-1);
a[0] += PntF(-2,-3);
a.Add<new List<PointF>>;
a[1].Add(PntF(1,2));