标签: rectangles

确定两个矩形是否相互重叠?

我正在尝试编写一个C++程序,它从用户那里获取以下输入来构造矩形(2到5之间):高度,宽度,x-pos,y-pos.所有这些矩形将平行于x轴和y轴存在,即它们的所有边都将具有0或无穷大的斜率.

我试图实现这个问题中提到的但我没有太多运气.

我目前的实现如下:

// Gets all the vertices for Rectangle 1 and stores them in an array -> arrRect1
// point 1 x: arrRect1[0], point 1 y: arrRect1[1] and so on...
// Gets all the vertices for Rectangle 2 and stores them in an array -> arrRect2

// rotated edge of point a, rect 1
int rot_x, rot_y;
rot_x = -arrRect1[3];
rot_y = arrRect1[2];
// point on rotated edge
int pnt_x, pnt_y;
pnt_x = arrRect1[2]; 
pnt_y = arrRect1[3]; …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm geometry rectangles overlap

320
推荐指数
7
解决办法
24万
查看次数

用于找到最少矩形以覆盖一组矩形而不重叠的算法

我有一组矩形,我想"减少"这个集合,所以我有最少的矩形来描述与原始集合相同的区域.如果可能的话,我希望它也快,但我更关心的是尽可能减少矩形的数量.我现在有一种方法,大部分时间都可以使用.

目前,我从最左上角的矩形开始,看看我是否可以在保持矩形的同时向右和向下展开它.我这样做,直到它不能再展开,删除并拆分所有相交的矩形,并在列表中添加展开的矩形.然后我再次使用下一个左上角的矩形开始该过程,依此类推.但在某些情况下,它不起作用.例如: 在此输入图像描述

使用这组三个矩形,正确的解决方案最终会有两个矩形,如下所示: 在此输入图像描述

但是,在这种情况下,我的算法从处理蓝色矩形开始.这会向下扩展并分割黄色矩形(正确).但是当处理黄色矩形的剩余部分时,它不是向下扩展,而是首先向右扩展并收回先前分离的部分.然后处理最后一个矩形,它不能向右或向下扩展,因此保留原始的矩形集.我可以调整算法,先向下扩展然后向右扩展.这将解决这种情况,但它会在翻转的类似场景中导致同样的问题.

编辑:只是为了澄清,原始的矩形集不重叠,不必连接.如果连接了矩形的子集,则完全覆盖它们的多边形可以在其中具有孔.

language-agnostic algorithm geometry rectangles

68
推荐指数
1
解决办法
2万
查看次数

用于2D碰撞检测的四叉树的高效(并且得到充分解释)实现

我一直在努力将Quadtree添加到我正在编写的程序中,我不禁注意到,我正在寻找的实现很少有很好的解释/执行教程.

具体来说,我正在寻找的一个方法列表和如何实现它们(或只是它们的过程的描述)的方法和伪代码的列表(检索,插入,删除等)是我正在寻找的,以及也许一些提高性能的技巧.这是用于碰撞检测,因此最好用2d矩形来解释,因为它们是将要存储的对象.

quadtree rectangles collision data-structures

29
推荐指数
7
解决办法
2万
查看次数

从2个矩形中获取交点

假设我们有两个矩形,用左下角和右上角定义.例如:rect1(x1,y1)(x2,y2)rect2(x3,y3)(x4,y4).我正在尝试找到相交矩形的坐标(左下角和右上角).

任何想法,算法,伪代码,将不胜感激.

ps我发现了类似的问题,但只检查了2个矩形是否相交.

c++ algorithm scheme geometry rectangles

27
推荐指数
4
解决办法
3万
查看次数

如何检查NSPoint是否位于NSRect内

我创建了一个包含NSRect值的可变数组.我想检查我创建的NSPoint是否在此矩形内.在可可做这个的最好方法是什么.

cocoa rectangles points

26
推荐指数
1
解决办法
8770
查看次数

矩形覆盖

我有N个矩形,其边与x轴和y轴平行.还有另一个矩形模型.我需要创建一个算法来判断模型是否被N个矩形完全覆盖.

我有一些想法.我认为首先,我需要通过左侧对矩形进行排序(可以在O(n log n)时间内完成),然后使用垂直扫描线.

+------------------------------------------------------------> x
|O
|                  +----+
|   +---------+    |    |
|   |        ++----+--+ |
|   |      +-++----+-+| |
|   |      | |     +-++-+
|   +------+ +-------++
|          +---------+
|
|
|
|y
Run Code Online (Sandbox Code Playgroud)

蓝色矩形是模型.

首先,我需要抽象算法.对于实现没有特殊要求.矩形可以表示为一对点(左上角和右下角).

这是准备测试的任务之一.我知道最好的算法可以在O(n log n)时间内完成.

algorithm geometry rectangles

21
推荐指数
2
解决办法
4870
查看次数

Qt绘制带边框的填充圆角矩形

我想画一个带圆角的矩形(所有4个角的边框半径相同),特定的颜色填充整个矩形,还有一个单独的边框颜色(比如边框宽1 px).

从我的观察,Qt提供了三种方法- fillRectdrawRectdrawRoundedRect.我试过了,他们不像我想的那样工作.没有像这样的方法fillRoundedRect.这意味着我可以绘制一个圆角矩形,但它不会填充我想要的颜色.

我该怎么做?而且,我读到由于一些混叠问题,角落经常被渲染为不相等.如何将它设置为全部四个相等?会painter.setRenderHint(QPainter::Antialiasing)满足吗?或者我还要做其他事吗?

c++ qt rectangles rounded-corners qpainter

20
推荐指数
1
解决办法
3万
查看次数

如何计算两个矩形之间的距离?(背景:Lua的游戏.)

给定两个具有x,y,宽度,高度(以像素为单位)的矩形以及以度为单位的旋转值 - 如何计算其轮廓彼此的最近距离?

背景:在用Lua编写的游戏中,我随机生成地图,但是想要确保某些矩形彼此不太靠近 - 这是必要的,因为如果矩形进入某个近距离位置,地图变得无法解决,如球需要在他们之间传球.速度不是一个大问题,因为我没有很多矩形,而且每个级别只生成一次地图.我在StackOverflow上找到的以前的链接是这个这个

提前谢谢了!

lua distance rectangles

18
推荐指数
4
解决办法
2万
查看次数

OpenCV groupRectangles - 获取分组和未分组的矩形

我正在使用OpenCV并希望将具有显着重叠的矩形组合在一起.我已经尝试过groupRectangles这个,它采用了一个组阈值参数.如果阈值为0则根本不进行任何分组,并且阈值为1时,仅返回由至少2个矩形组成的矩形.例如,给定下图中左侧的矩形,您最终得到右侧的2个矩形:

在此输入图像描述

我想最终得到的是3个矩形.上图中右侧的2,加上左侧图像右上角的矩形,不与任何其他矩形重叠.实现这一目标的最佳方法是什么?

c++ opencv rectangles

17
推荐指数
1
解决办法
1万
查看次数

如何在c#中绘制圆角矩形

我正在使用此代码来制作圆角矩形.但它只绘制了rectanlge的左上角和右上角,更不能完成下部的矩形.如何使其完整和充实.我应该做些什么改变?

public static Bitmap DrawRoundedRectangle(Bitmap Image, Color BoxColor, int XPosition, int YPosition,
        int Height, int Width, int CornerRadius)
    {
     Bitmap NewBitmap = new Bitmap(Image, Image.Width, Image.Height);
     using (Graphics NewGraphics = Graphics.FromImage(NewBitmap))
    {
        using (Pen BoxPen = new Pen(BoxColor))
        {
            using (GraphicsPath Path = new GraphicsPath())
            {
                   Path.AddLine(XPosition + CornerRadius, YPosition, XPosition + Width - (CornerRadius * 2), YPosition);
                    Path.AddArc(XPosition + Width - (CornerRadius * 2), YPosition, CornerRadius * 2, CornerRadius * 2, 270, 90);
                  Path.AddLine(XPosition + Width, YPosition + CornerRadius, …
Run Code Online (Sandbox Code Playgroud)

c# graphics drawing rectangles winforms

17
推荐指数
2
解决办法
2万
查看次数