四角ポリゴンの座標をソートしようとしています。四角ポリゴンの座標をソート
多角形はおおよそ長方形ですが、完全な長方形ではありません。
例は以下の通りです:
私はこのポリゴンから得るすべては、4つの座標のセットである、と私は私がそれを受け取る時計回りの毎回のように、それをソートしたいです。そして、最初のポイントは常に左上でなければなりません。
この問題にどのようにアプローチすればよいですか?
四角ポリゴンの座標をソートしようとしています。四角ポリゴンの座標をソート
多角形はおおよそ長方形ですが、完全な長方形ではありません。
例は以下の通りです:
私はこのポリゴンから得るすべては、4つの座標のセットである、と私は私がそれを受け取る時計回りの毎回のように、それをソートしたいです。そして、最初のポイントは常に左上でなければなりません。
この問題にどのようにアプローチすればよいですか?
私自身の質問に再度回答します。クワッドの点の配列があると仮定します。また、原点(0,0)はほとんどの左上にあります。順序は任意です。ここで私は単にポイントを入れます。
NSMutableArray *pointsArray = [[NSMutableArray alloc] initWithObjects:
[NSValue valueWithCGPoint:rf.bottomLeft],
[NSValue valueWithCGPoint:rf.topRight],
[NSValue valueWithCGPoint:rf.topLeft],
[NSValue valueWithCGPoint:rf.bottomRight],
nil];
まず、ポイントをx座標で小から大にソートします。
NSArray *sortedByX = [pointsArray sortedArrayUsingComparator:^NSComparisonResult(NSValue *obj1, NSValue *obj2) {
CGPoint p1 = [obj1 CGPointValue];
CGPoint p2 = [obj2 CGPointValue];
return p1.x > p2.x;
}];
次に、最初の2点(基本的に左上と左下の2点)を取得します。そこで、これらの2つのY値を調べて、どちらが上部にあり、どちらが最下部にあるのかを判断し、すぐに割り当てることができます。同じ
CGPoint Pt1, Pt2, Pt3, Pt4;
CGPoint ptMinX1 = [[sortedByX objectAtIndex:0] CGPointValue];
CGPoint ptMinX2 = [[sortedByX objectAtIndex:1] CGPointValue];
if (ptMinX1.y<ptMinX2.y) {
Pt1 = ptMinX1;
Pt4 = ptMinX2;
} else {
Pt1 = ptMinX2;
Pt4 = ptMinX1;
}
は、右側の点を決定するために行われます。
CGPoint ptMaxX1 = [[sortedByX objectAtIndex:2] CGPointValue];
CGPoint ptMaxX2 = [[sortedByX objectAtIndex:3] CGPointValue];
if (ptMaxX1.y<ptMaxX2.y) {
Pt2 = ptMaxX1;
Pt3 = ptMaxX2;
} else {
Pt3 = ptMaxX1;
Pt2 = ptMaxX2;
}
は最後に、私たちはそのため、時計回りにポイントを取得する:あなたが好きなようにあなたは、その後
左下にどのように座標が定義されていますか(x = 0とy = 0)?その場合、私はあなたの数式に従うときに、私は非時計回りの注文を得る。 –
実際に私のシステムでは、原点(0,0)は左上にあります。 – GeneCode
回答の起点を基準に仮定を追加できますか? –
が問題それをしない座標た(ジグザグまたは何、反時計回りに)これらの点を手配することができます
最初に来る?または時計回りであれば、最初のポイントは任意のもの(上、右下など) – Addison
最初は常に右上でなければなりません。 – GeneCode
右上に等しく2点ある場合はどうなりますか?正方形の '(0、1)'と '((1,0) 'のように、45度回転していますか?上または右はより重要ですか? – Addison