考慮這個ASCII圖紙:iOS的 - 如何繪製一個特定CGPath與無序CGPoints
A _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ D
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
B C
點A,B,C,和d已知的NSMutableArray
內CGPoints
,並已用於創建一個充滿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
協調。 - (#1的延伸)一個點將始終與它之前和之後的點成直角。
- 不可能預測點將在方塊內出現的位置,並且當附加到數組末尾時,新的一組點可能會或可能不會按順序排列。
- ...
其他可能佈局
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
你如何把點放入你的數組?爲什麼你不能按照你需要的順序擁有它們? – rdelmar 2012-07-21 16:07:09
這些點總是與另一個成直角,還是僅用於這個例子? – 2012-07-21 17:38:52
@rdelmar在數組初始化之後的未知時間添加點。陣列中僅有的四個點在初始化時是四個角落。 – Anthony 2012-07-21 19:09:04