【问题标题】:How do I create a rectangle from two points?如何从两点创建一个矩形?
【发布时间】:2017-08-27 18:08:50
【问题描述】:

我有两个点,比如说一个矩形的左上角和右下角,在 C++ .Net 中。如何从 .net 中的这两点创建 System.Drawing.Rectangle 结构?这应该很简单,我错过了什么吗?
Rectangle 构造函数仅适用于给定的 Point 和 Size,并通过给出单独的整数值,我在这里不计算在内。给两分是不行的。
大小结构也不能以简单的方式从两点创建。没有定义从另一个点减去一个点,它应该给出一个大小,我看不到其他函数可以做到这一点。
所以我必须自己编写函数?它应该就在那里。

【问题讨论】:

  • 如果你有左上角和右下角,你有矩形的尺寸。获取每个点的 x 和 y 坐标(您可能需要使用 getter),然后减去它们。另外请标记您的语言并说明您正在使用的图形库。
  • 我当然可以手动执行此操作,但我经常需要它。它应该就在那里,.Net 中的 System.Drawing.Rectangle 是我知道的唯一一个似乎没有这个的矩形实现。好吧,我也最好使用双数格式,所以我只是在编写自己的类。有兴趣的可以分享一下。
  • 只做一个函数,然后使用函数。一个伪构造函数解决了这个问题。
  • Emil 你能指向一个例子的链接吗?你有一个矩形,它需要两个点来构成一个矩形?因为我从来没有见过这样做的矩形示例(我见过减去两个点来制作一个矩形,但这可能是任何一种方式,这取决于您将点视为点还是二维向量)
  • @ScottChamerlain: System.Windows.Rect 结构可以由两个点或点和大小构成:
    msdn.microsoft.com/en-us/library/…> 在 MFC RECT 结构中,您可以直接放置
    Delphi TRect 类型也可以使用两个点进行构造:docwiki.embarcadero.com/Libraries/Tokyo/en/System.Types.TRect

标签: c++ .net rectangles system.drawing


【解决方案1】:

您可以轻松地创建一个静态方法,将您的两个点转换为一个大小,然后让它调用矩形的构造函数,该构造函数接受一个点和一个大小。

此答案使用 C# 语法,但您应该能够轻松地将其转换为 C++/cli 语法。

public static Rectangle GetRectangle(Point topLeft, Point bottomRight)
{
    var size = new Size(topLeft.X-bottomRight.X, topLeft.Y-bottomRight.Y);
    return new Rectangle(topLeft, size);
}

补充:上面的原始答案会导致尺寸为负数

Point topLeft = new Point(0, 0);
Point bottomRight = new Point(100, 200);
Rectangle rect = GetRectangle(topLeft, bottomRight);

矩形的宽度为-100;所以应该是:

var size = new Size(bottomRight.X, bottomRight.Y-topLeft.Y);

或者甚至更好:如果您不想担心这两个点中的哪一个在 TopLeft:

public static Rectangle GetRectangle(Point p1, Point p2)
{
    int left = Math.Min(p1.X, p2.X);
    int right = Math.Max(p1.X, p2.X);
    int top = Math.Min(p1.Y., p2.Y);
    int bottom = Math.Max(p1.Y, p2.Y);
    int width = right - left;
    int height = bottom - top;
    return new Rectangle(left, top, width, height);
}

为了让事情变得容易理解,我只是一步一步地做到了这一点。当然这可以优化。

【讨论】:

  • 谢谢。是的,就是这么简单,我应该马上看到的。
猜你喜欢
  • 2013-05-09
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
相关资源
最近更新 更多