我有一个连接的形状,由放在一起的正方形组成,例如,取一个方形纸,沿着现有的线条绘制一条线,该线条在其开始处结束并且不会交叉.
现在的目标是找到一个算法(而不是强力),用尽可能少的非重叠矩形填充这个形状.
我正在寻找最佳解决方案.从图像中可以看出,天真贪婪的方法(采取最大的矩形)不起作用.
(最佳)
(贪婪)
我的场景是顶点缩减,但我确信还有其他用例.
注意:此问题似乎很基本,但我无法在其他地方找到解决方案.还有,这个问题NP难吗?
编辑:我刚刚意识到,在我的场景中,用尽可能少的非重叠三角形填充形状会产生更好的结果.
我正在制作一个需要知道如何在python 3.2中绘制矩形的游戏。
我检查了很多资源,但没有一个确切地显示如何去做。
谢谢!
因此,我有一个分为两个三角形的矩形,并且有一个点:

我知道矩形的四个顶点(A,B,C和D)的坐标,也知道P的坐标。我需要知道的是两个三角形中的哪个是点。
我认为这是一件非常简单的事情,但是显然我自己无法弄清楚。
有什么帮助吗?
我正在制作Pong游戏,我遇到了一个问题.当球(一个矩形)与球拍下方或上方的球拍(或球棒)碰撞时,我得到一个奇怪的错误,球进入矩形并左右 - 左 - 右达到高速(因为我添加了)加速)并在对面跳出来.我知道为什么会发生这个错误:
if (ballrec.Intersects(player1rec)
&& ball.x <= 20
&& ball.y + 20 >= player.y
&& ball.y <= player.y + 100) //checks the front rebound-here's the bug
{
ball.vx *= -1; //changes x-direction
if (ball.vx < 0)
ball.vx -= 1; //increases x-velocity
effect.Play();
if (R.Next(4) == 0)
{
if (ball.vy < 0) ball.vy--;
else ball.vy++; //increases y-velocity on a special occasion
}
}
else
{
if (ballrec.Intersects(player1rec))
{
ball.vy *= -1;
effect.Play();
}
}
Run Code Online (Sandbox Code Playgroud)
ball.vy = velocity y-axis:我将它乘以-1以改变方向 …
对于碰撞检测,我想使用尽可能少的矩形将位图转换为一组矩形.标题中描述了对该问题的更正式描述.一个例子:

对于多种解决方案的断路器,如果所有矩形组合所覆盖的总面积最大化,我更喜欢它.例如,上图中的蓝色矩形可能会更小,但这可能是一个不太理想的解决方案.
这个问题有更常见的名称吗?有文献吗?或者是一种提供最佳解决方案的简单算法?
我打算制作一款游戏,我想为这款游戏制作一些背景动画.其中一个动画是旋转矩形.我看了一遍,我找不到任何形式的数学或逻辑,允许我旋转一个矩形(SDL_Rect是具体的,但你可能已经知道).
我无法弄清楚自己的数学,我真的没有任何工作代码,所以我无法显示任何东西.
基本上我正在寻找某种类型的逻辑,我可以应用矩形的坐标,这样每当主游戏循环循环时,它将旋转矩形一定程度的度数.
在高度为500且宽度为10 ^ 5的矩形空间中,我们给出N个点.
我们应该找出最大的子矩形,其基部位于x轴上,并且不包含其正确内部的任何点(但可以在其边缘包含它们).
我尝试了一种O(宽度^ 2)算法:
#include <iostream>
#include <algorithm>
const int nWidth = 100000;
const int nHeight = 500;
int main(){
int *nMaxHeights = new int[nWidth];
std::fill (nMaxHeights, nMaxHeights+nWidth, nHeight);
int N;
std::cin >> N;
for (int x,y,iii=0; iii < N; iii++){
std::cin >> x >> y;
nMaxHeights[x] = std::min(y+1, nMaxHeights[x]);
}
int maxArea = 0;
for (int jjj,iii=0; iii < nWidth; iii++){
for (jjj=iii; jjj < nWidth; jjj++){
if (nMaxHeights[jjj] < nMaxHeights[iii])
break;
}
maxArea = std::max((jjj-iii+1)*nMaxHeights[iii],maxArea); …Run Code Online (Sandbox Code Playgroud) 在pygame中,我pygame.draw.rect(screen, color, rectangle)在程序中使用了所有矩形。我希望能够将这些矩形旋转到任意角度。我已经看到以下代码来旋转图像,但是我的问题是RECTANGLES。
pygame.transform.rotate(image, angle)
Run Code Online (Sandbox Code Playgroud)
但是我正在使用矩形,但是我没有可以旋转的图像或“表面”。当我尝试旋转一个矩形
rect = pygame.draw.rect(screen, self.color, self.get_rectang())
rotatedRect = pygame.transform.rotate(rect, self.rotation)
screen.blit(rotatedRect)
Run Code Online (Sandbox Code Playgroud)
这给出TypeError: must be pygame.Surface, not pygame.Rect了.rotate()
我的问题是,如何(x,y,w,h)在pygame中旋转a并显示RECTANGLE 而不是图像。
这是“潜在重复项”的链接文章不是重复项。一个答案解释了旋转矩形的后果,另一个答案使用代码旋转图像。
我有左上角的坐标和矩形列表的右下角说(a,b)和(c,d).我想检测并删除矩形内的矩形.可以留下重叠的矩形.
我有一个10,000个矩形的数据集,我想要一个有效的方法来解决这个问题.
目前我这样做,
import pandas
data = pd.read_csv('dataset.csv')
l = list(range(len(data)-1))
for i in range(len(data)):
length = len(l)
if i >= length:
break
for j in range(i+1, length):
if j >= len(l):
break
if (data.iloc[l[i]]['a'] >= data.iloc[l[j]]['a']) and (data.iloc[l[i]]['b'] <= data.iloc[l[j]]['b']) and (data.iloc[l[i]]['c'] <= data.iloc[l[j]]['c']) and (data.iloc[l[i]]['d'] >= data.iloc[l[j]]['d']):
l.pop(j)
Run Code Online (Sandbox Code Playgroud)
我在按照矩形区域的降序对数据集进行排序后实现了这种算法,因为矩形区域较大,不适合具有较小区域的矩形.在这里,我检测到它是否在另一个矩形内,从列表l中弹出矩形的索引.每次元素加载时,它都会减少迭代次数.
这需要几个小时才能解决,我需要一种有效的方法来解决它甚至数十万个样本.
请帮忙!
python algorithm performance rectangles computational-geometry
我目前在编程图编辑器javascript有SVG。
我陷入与矩形之间的连接有关的问题。我发现了很多资源可以在圆之间绘制连接,但矩形却一无所获。
所以现在我得到的是,我可以通过用鼠标拖动线在两个矩形之间绘制一条连接线,但是该连接显示在它们内部,因为我是从矩形的中点计算出连接的。
如您在下面的图片中看到的,我使自己有了一些想法,但是我没有走最后一步。
我只想绘制标记为红色的线。

稍后我要拖动矩形,并且应该更新该线,但是现在我只需要计算这条线即可。
有人有好的建议吗?
rectangles ×10
algorithm ×4
python ×3
pygame ×2
rotation ×2
2d-games ×1
c# ×1
c++ ×1
collision ×1
connection ×1
coordinates ×1
diagonal ×1
javascript ×1
packing ×1
performance ×1
sdl ×1
svg ×1
vertices ×1
xna ×1