0

如何从4个点制作矩形?我正在通过角落创建可调整大小的矩形。

我可以用这样的两点来做到这一点:

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

以前的答案已经产生了你的矩形,但你说他们没有做你想要的,但不是他们为什么错了......所以我会猜测一下,以防万一我猜对了:

我猜您有一个矩形,并且您希望像在图形程序中单击拖动时那样移动它的一个角。我根据您的示例代码进一步假设矩形边平行于轴。

在这种情况下,与您移动的点对角的点是锚点——它保持不动。您移动的一个明显移动,另外两个移动以保持形状为矩形。

如果是这种情况,那么您仅根据您移动的点及其对角点来计算矩形。如果 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 回答