Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从两点创建矩形? 我有两个点,即C++中的矩形的左上角和右下角。如何从.net中的这两点创建System.Drawing.Rectangle结构?这应该很简单,我遗漏了什么吗 矩形构造函数只在给定点和大小的情况下工作,并且通过提供单独的整数值来工作,我在这里不考虑这一点。给出两点是行不通的。 尺寸结构也不能简单地从两点创建。从一个点减去另一个点是没有定义的,这应该会给出一个大小,我看不到其他函数可以做到这一点。 所以我必须自己写函数?它应该就在那里。_C++_.net_Rectangles_System.drawing - Fatal编程技术网

如何从两点创建矩形? 我有两个点,即C++中的矩形的左上角和右下角。如何从.net中的这两点创建System.Drawing.Rectangle结构?这应该很简单,我遗漏了什么吗 矩形构造函数只在给定点和大小的情况下工作,并且通过提供单独的整数值来工作,我在这里不考虑这一点。给出两点是行不通的。 尺寸结构也不能简单地从两点创建。从一个点减去另一个点是没有定义的,这应该会给出一个大小,我看不到其他函数可以做到这一点。 所以我必须自己写函数?它应该就在那里。

如何从两点创建矩形? 我有两个点,即C++中的矩形的左上角和右下角。如何从.net中的这两点创建System.Drawing.Rectangle结构?这应该很简单,我遗漏了什么吗 矩形构造函数只在给定点和大小的情况下工作,并且通过提供单独的整数值来工作,我在这里不考虑这一点。给出两点是行不通的。 尺寸结构也不能简单地从两点创建。从一个点减去另一个点是没有定义的,这应该会给出一个大小,我看不到其他函数可以做到这一点。 所以我必须自己写函数?它应该就在那里。,c++,.net,rectangles,system.drawing,C++,.net,Rectangles,System.drawing,您可以轻松地创建一个静态方法,将两点转换为一个大小,然后让它调用矩形的构造函数,该构造函数接受一个点和一个大小 这个答案使用C#语法,但您应该能够轻松地将其转换为C++/cli语法 public static Rectangle GetRectangle(Point topLeft, Point bottomRight) { var size = new Size(topLeft.X-bottomRight.X, topLeft.Y-bottomRight.Y); return

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

这个答案使用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);
或者更好:如果您不想为两点中的哪一点位于左上方而烦恼:

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);
}

为了让事情更容易理解,我做了一些小步骤。当然,这是可以优化的。

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

这个答案使用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);
或者更好:如果您不想为两点中的哪一点位于左上方而烦恼:

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);
}

为了让事情更容易理解,我做了一些小步骤。当然,这是可以优化的。

如果有左上角和右下角,则有矩形的尺寸。获取每个点的x和y坐标(可能需要使用getter),然后减去它们。另外,请标记您的语言,并说明您正在使用的图形库。当然,我可以手动执行此操作,但我经常需要它。它应该就在那里,.Net中的System.Drawing.Rectangle是我所知道的唯一一个似乎没有这个功能的矩形实现。嗯,我也最好使用双倍数字格式,所以我只写我自己的类。如果有人感兴趣,可以分享。只需制作一个函数,然后使用该函数。一个伪构造函数解决了这个问题。Emil你能给一个例子指出一个链接吗?你有一个矩形,它用两个点组成一个矩形?因为我从未见过这样的矩形示例(我见过两个点相减形成一个矩形,但这两种方法都可以,这取决于您是将点视为点还是将点视为二维向量)@ScottChamerlain:System.Windows.Rect结构可以从两个点或从点和大小构建:
>在MFC Rect结构中,您可以直接放置角点的坐标。
Delphi TRect类型也可以使用两个点进行构建:如果您有左上角和右下角,你有矩形的尺寸。获取每个点的x和y坐标(可能需要使用getter),然后减去它们。另外,请标记您的语言,并说明您正在使用的图形库。当然,我可以手动执行此操作,但我经常需要它。它应该就在那里,.Net中的System.Drawing.Rectangle是我所知道的唯一一个似乎没有这个功能的矩形实现。嗯,我也最好使用双倍数字格式,所以我只写我自己的类。如果有人感兴趣,可以分享。只需制作一个函数,然后使用该函数。一个伪构造函数解决了这个问题。Emil你能给一个例子指出一个链接吗?你有一个矩形,它用两个点组成一个矩形?因为我从未见过这样的矩形示例(我见过两个点相减形成一个矩形,但这两种方法都可以,这取决于您是将点视为点还是将点视为二维向量)@ScottChamerlain:System.Windows.Rect结构可以从两点或从点和大小构建:
>在MFC Rect结构中,您可以直接放置角点的坐标。
Delphi TRect类型也可以使用两点进行构建:谢谢。是的,它很简单,我应该马上看到这个。谢谢。是的,它是如此简单,我应该马上看到这个。