繁体   English   中英

如何从两点创建矩形?

[英]How do I create a rectangle from two points?

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

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

此答案采用 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);
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM