我正在尝试编写一个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) 我有一组矩形,我想"减少"这个集合,所以我有最少的矩形来描述与原始集合相同的区域.如果可能的话,我希望它也快,但我更关心的是尽可能减少矩形的数量.我现在有一种方法,大部分时间都可以使用.
目前,我从最左上角的矩形开始,看看我是否可以在保持矩形的同时向右和向下展开它.我这样做,直到它不能再展开,删除并拆分所有相交的矩形,并在列表中添加展开的矩形.然后我再次使用下一个左上角的矩形开始该过程,依此类推.但在某些情况下,它不起作用.例如:

使用这组三个矩形,正确的解决方案最终会有两个矩形,如下所示:

但是,在这种情况下,我的算法从处理蓝色矩形开始.这会向下扩展并分割黄色矩形(正确).但是当处理黄色矩形的剩余部分时,它不是向下扩展,而是首先向右扩展并收回先前分离的部分.然后处理最后一个矩形,它不能向右或向下扩展,因此保留原始的矩形集.我可以调整算法,先向下扩展然后向右扩展.这将解决这种情况,但它会在翻转的类似场景中导致同样的问题.
编辑:只是为了澄清,原始的矩形集不重叠,不必连接.如果连接了矩形的子集,则完全覆盖它们的多边形可以在其中具有孔.
我一直在努力将Quadtree添加到我正在编写的程序中,我不禁注意到,我正在寻找的实现很少有很好的解释/执行教程.
具体来说,我正在寻找的一个方法列表和如何实现它们(或只是它们的过程的描述)的方法和伪代码的列表(检索,插入,删除等)是我正在寻找的,以及也许一些提高性能的技巧.这是用于碰撞检测,因此最好用2d矩形来解释,因为它们是将要存储的对象.
假设我们有两个矩形,用左下角和右上角定义.例如:rect1(x1,y1)(x2,y2)和 rect2(x3,y3)(x4,y4).我正在尝试找到相交矩形的坐标(左下角和右上角).
任何想法,算法,伪代码,将不胜感激.
ps我发现了类似的问题,但只检查了2个矩形是否相交.
我创建了一个包含NSRect值的可变数组.我想检查我创建的NSPoint是否在此矩形内.在可可做这个的最好方法是什么.
我有N个矩形,其边与x轴和y轴平行.还有另一个矩形模型.我需要创建一个算法来判断模型是否被N个矩形完全覆盖.
我有一些想法.我认为首先,我需要通过左侧对矩形进行排序(可以在O(n log n)时间内完成),然后使用垂直扫描线.
+------------------------------------------------------------> x
|O
| +----+
| +---------+ | |
| | ++----+--+ |
| | +-++----+-+| |
| | | | +-++-+
| +------+ +-------++
| +---------+
|
|
|
|y
Run Code Online (Sandbox Code Playgroud)
蓝色矩形是模型.
首先,我需要抽象算法.对于实现没有特殊要求.矩形可以表示为一对点(左上角和右下角).
这是准备测试的任务之一.我知道最好的算法可以在O(n log n)时间内完成.
我想画一个带圆角的矩形(所有4个角的边框半径相同),特定的颜色填充整个矩形,还有一个单独的边框颜色(比如边框宽1 px).
从我的观察,Qt提供了三种方法- fillRect和drawRect和drawRoundedRect.我试过了,他们不像我想的那样工作.没有像这样的方法fillRoundedRect.这意味着我可以绘制一个圆角矩形,但它不会填充我想要的颜色.
我该怎么做?而且,我读到由于一些混叠问题,角落经常被渲染为不相等.如何将它设置为全部四个相等?会painter.setRenderHint(QPainter::Antialiasing)满足吗?或者我还要做其他事吗?
我正在使用OpenCV并希望将具有显着重叠的矩形组合在一起.我已经尝试过groupRectangles这个,它采用了一个组阈值参数.如果阈值为0则根本不进行任何分组,并且阈值为1时,仅返回由至少2个矩形组成的矩形.例如,给定下图中左侧的矩形,您最终得到右侧的2个矩形:

我想最终得到的是3个矩形.上图中右侧的2,加上左侧图像右上角的矩形,不与任何其他矩形重叠.实现这一目标的最佳方法是什么?
我正在使用此代码来制作圆角矩形.但它只绘制了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)