0

4点から長方形を作る方法は? 角でサイズ変更可能な長方形を作成しています。

こんな感じの2点で作れます。

NSMakeRect( MIN(point1.x, point3.x), 
                      MIN(point1.y, point3.y), 
                      fabs(point1.x - point3.x), 
                      fabs(point1.y - point3.y));

1 (左下) または 3 (右上) のコーナーを移動するとうまくいきますが、2 (左上) または 4 (右下) の場合はうまくいきません。4つのNSPointsで作る方法 - コーナー?

4

3 に答える 3

1

指定されたすべての NSPoints を含む Rectangle を作成するには (いくつであっても)、最小値最大値を見つける必要があります。

// start by initializing their opposite MIN/MAX values
CGFloat xmin = CGFLOAT_MAX, xmax = CGFLOAT_MIN,
        ymin = CGFLOAT_MAX, ymax = CGFLOAT_MIN;
NSUInteger pointCount = ? // you'd have to add this
NSPoint points[pointCount] = { ... } // suppose you know your values :D

for (NSUInteger i = 0; i < pointCount; i++) {
  xmin = MIN(xmin, points[i].x);
  xmax = MAX(xmax, points[i].x);
  ymin = MIN(ymin, points[i].y);
  ymax = MAX(ymax, points[i].y);
}

// now create a rect from those points
NSRect rect = NSMakeRect(xmin, ymin, xmax - xmin, ymax - ymin);
于 2012-02-17T16:00:10.650 に答える
1

前の回答で長方形が作成されましたが、あなたはそれらがあなたが望むことをしないと言いますが、なぜ間違っているのかではありません...だから、私が正しいと思う場合に備えて、推測します:

あなたは四角形を持っていて、グラフィカルプログラムでクリックアンドドラッグするときのように、その角の1つを移動したいと思っていると思います。さらに、サンプルコードに基づいて、長方形の辺が軸に平行であると想定しています。

このシナリオでは、移動するポイントの対角線上にあるポイントがアンカーであり、固定されたままです。あなたが動かしたものは明らかに動き、残りの2つは形状を長方形に保つために動きます。

この場合、移動する点とその対角線上の点のみに基づいて長方形を計算します。質問で指定したコードは、point1 または point3 が移動した場合にケースを処理します。point2 または point4 が移動された場合のコードが必要なだけで、単純な置換で取得できます。

NSMakeRect( MIN(point2.x, point4.x), 
                  MIN(point2.y, point4.y), 
                  fabs(point2.x - point4.x), 
                  fabs(point2.y - point4.y));

移動したポイントを把握し、適切なコードを選択するだけです。

于 2012-02-18T10:18:36.287 に答える
0

あなたにとっての主な問題はポイントだと思います、それらをチェックしてください。

次のように描くことができる4点からの長方形:

NSMakeRect(MIN(MIN(points[0].x, points[2].x), MIN(points[1].x, points[3].x)),
           MIN(MIN(points[0].y, points[2].y), MIN(points[1].y, points[3].y)),
           MAX(fabs((points[0].x - points[2].x)),fabs(points[1].x - points[3].x)),
           MAX(fabs((points[0].y - points[2].y)), fabs((points[1].y - points[3].y))));
于 2012-02-18T09:44:53.263 に答える