Meine eigene Frage noch einmal beantworten. Angenommen, wir haben eine Reihe von Punkten des Quads. Und der Ursprungspunkt (0,0) ist höchstens oben links. Die Reihenfolge ist beliebig. Hier gebe ich einfach die Punkte an.
NSMutableArray *pointsArray = [[NSMutableArray alloc] initWithObjects:
[NSValue valueWithCGPoint:rf.bottomLeft],
[NSValue valueWithCGPoint:rf.topRight],
[NSValue valueWithCGPoint:rf.topLeft],
[NSValue valueWithCGPoint:rf.bottomRight],
nil];
Zuerst sortieren wir die Punkte nach x-Koordinaten von klein nach groß.
NSArray *sortedByX = [pointsArray sortedArrayUsingComparator:^NSComparisonResult(NSValue *obj1, NSValue *obj2) {
CGPoint p1 = [obj1 CGPointValue];
CGPoint p2 = [obj2 CGPointValue];
return p1.x > p2.x;
}];
Dann erhalten wir die ersten 2 Punkte (diese beiden im Grunde die obere links und unten links). Also überprüfen wir die Y-Werte dieser beiden, um zu bestimmen, was oben ist und was unten ist, und wir können das sofort zuweisen.
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;
}
Gleiche geschieht, um die rechten Seiten Punkte zu bestimmen.
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;
}
Schließlich erhalten wir die Punkte in dieser Reihenfolge im Uhrzeigersinn:
// Pt1 Pt2
//
// Pt4 Pt3
Anschließend können Sie diese Punkte anordnen, wie Sie (gegen den Uhrzeigersinn, zickzack oder was auch immer) wie
es keine Rolle spielt, die Koordinate kommt zuerst? Oder solange es im Uhrzeigersinn ist, kann der erste Punkt beliebig sein (oben, unten rechts usw.). – Addison
Der erste muss immer oben rechts sein. – GeneCode
Was ist, wenn es 2 Punkte gibt, die gleich oben rechts liegen? Wie die '(0, 1)' und '(1, 0)' eines um 45 Grad gedrehten Quadrats? Ist die Spitze oder die rechte wichtiger? – Addison