Рассмотрим этот рисунок ASCII:
A _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
B C
Точки A, B, C и D известны CGPoints
внутри NSMutableArray
и использовались для создания заполненного CGPath
. Теперь рассмотрим этот рисунок:
A _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D
| |
| |
| |
| |
| H _ _ _ I |
| | | |
| | | |
| F _ _ _| | |
| | G | |
| | |_ _ _ K |
| | J | |
| | | |
|_ _ _ _| _ _ _ _ _ _ _ _ |_ _ _|
B E L C
CGPoints
E, F, G, H, I, J, K и L известны и добавлены в конец NSMutableArray
.
Вопрос
Как переставить все точки в массиве, чтобы создать CGPath
, как на рисунке ниже?
A _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D
| |
| |
| |
| |
| H _ _ _ I |
| | | |
| | | |
| F _ _ _| | |
| | G | |
| | |_ _ _ K |
| | J | |
| | | |
|_ _ _ _| |_ _ _|
B E L C
В настоящее время у меня нет проблем с созданиемCGPath
-если я знаю порядокCGpoints
-перебирая их:
CGPoint firstPoint = [[points objectAtIndex:0] CGPointValue];
CGMutablePathRef path = CGPathCreateMutable();
CGPathMoveToPoint(path, NULL, firstPoint.x, firstPoint.y);
for (int i = 0; i < [points count]; i++)
{
CGPathAddLineToPoint(path, NULL, [[points objectAtIndex:i] CGPointValue].x, [[points objectAtIndex:i] CGPointValue].y);
}
CGPathCloseSubpath(path);
... но это предполагает, что линия должна быть проведена от каждой точки массива i
до следующей точки i + 1
. На приведенном выше рисунке линии должны быть проведены от A → B
, B → E
, E → F
... K → L
, L → C
, C → D
. Если E не находится после B, а C не после L в массиве (, а они не будут ), то это, очевидно, не будет отображаться правильно.
Дополнительная информация
CGPoints
должны иметь общую координату x
или y
с CGPoint
до и после них.Другие возможные макеты
A _ _ _ _ _ _ _ K P _ _ _ D
| | | |
| | | |
| | N _ _ _| |
| | | O |
| |_ _ _| |
| L M |
| |
| F _ _ _ G |
| | | |
| | |_ _ _ I |
| | H | |
| | | |
|_ _ _ _ _ _ _| |_ _ _|
B E J C
A _ _ _ _ _ _ _ _ _ _ M
| |
| |
| |_ _ _ _ _ _ O
| N |
| H _ _ _ I |
| | | |
| | | |
| F _ _ _| | |
| | G | |
| | |_ _ _ K |
| | J | |
| | | |
|_ _ _ _| |_ _ _|
B E L C