は、このASCIIの描画を考えてみましょう:iOSの - 順不同CGPointsで特定CGPathにを描画する方法
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
ポイントは常に互いに直角になっていますか、それとも単なる例ですか? –
@rdelmar点は、配列が初期化された後、不明な時刻に追加されます。初期化時の配列内の唯一の4つの点は四隅です。 – Anthony