我正在寻找一种简单的方法来计算两个矩形之间的差异.我的意思是所有属于一个矩形的点,但不属于两个(所以它就像XOR).
在这种情况下,矩形是轴对齐的,因此只有直角.我相信差异区域可以用0-4个矩形表示(如果两个矩形相同则为0,如果只有一个边缘不同则为1,一般情况下为4),我想将差异区域作为列表矩形
您还可以将其视为在移动/调整实体矩形时必须更新的屏幕区域.
示例:将矩形"a"的宽度加倍 - 我想要添加的区域(R).
+----+----+
| a | R |
| | |
+----+----+
Run Code Online (Sandbox Code Playgroud)
相交的矩形(a和b) - 我希望T,L,R和B在矩形中给出的区域(可能的其他分区),但不包括X:
+------------+ a
| T |
|·····+------+-----+ b
| L | X | R |
| | | |
+-----+------+·····|
| B |
+------------+
Run Code Online (Sandbox Code Playgroud)
我更喜欢python解决方案/库,但任何强大的算法都会有所帮助.
可能重复:
以相当优化的方式打包矩形所需的算法
我有N个矩形,每个都是随机大小(随机宽度和高度).所有矩形都与X和Y轴平行.我正在寻找一种算法,帮助我并排排列这些矩形,使得生成的边界矩形具有最小面积,并且输入矩形周围/之间的潜在间隙尽可能小.矩形不能旋转,可能不会相互重叠.
(我需要这些来自动化游戏精灵的排列,这样我就可以创建精灵表并从动画师的各种图像中保存精灵位置.)
例如:
+---+ +----------+
| 1 | | 2 |
+---+ +----------+ +----------+.. +---+----------+
| 2 |.. | 1 | 2 |
+--------+ ===> +--------+-+-+ vs +---+----+-----+
| | | | 1 | | |......
| 3 | | 3 +---+ | 3 |......
+--------+ +--------+.... +--------+......
Unused: 8 Unused: 18
Run Code Online (Sandbox Code Playgroud)
未使用的空间由图中的点(.)标记.由于第一个结果具有带有较小未使用空间的边界矩形,因此最好找到输入矩形的这种排列.
是否有一种算法可以帮助解决这个问题?我做了很多谷歌搜索,但大多数结果与找到最小边界矩形或找到N个矩形覆盖预定区域有关.
我有一个围绕它的中间旋转的矩形,我有另一个矩形,我想连接到旋转矩形的右上角.问题是我不知道如何到达角落,以便第二个矩形总是会粘在那个角落.
这是我的示例代码.现在第二个矩形将始终在同一个地方,这不是我追求的结果.
package Test;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import javax.swing.*;
class Test{
public static void main(String[] args){
new Test();
}
public Test(){
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new Graphic());
frame.setSize(1000,700);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
}
class Graphic extends JPanel{
private int x, y, windowW, windowH;
private double angle;
private Rectangle rect1, rect2;
private Path2D path;
private Timer timer;
private AffineTransform rotation;
public Graphic(){
windowW = (int) …Run Code Online (Sandbox Code Playgroud) 假设我有一组(X,Y)坐标为1000个盒子.
( x1, y1) ( x2, y2) Area
(0.0000,0.0000) (0.3412,0.4175) 0.1424
(0.7445,0.0000) (1.0000,0.6553) 0.1674
(0.7445,0.6553) (1.0000,1.0000) 0.0881
(0.0000,0.6553) (0.7445,1.0000) 0.2566
(0.3412,0.0000) (0.7445,0.4175) 0.1684
(0.3412,0.4175) (0.7445,0.6553) 0.0959
(0.0000,0.4175) (0.3412,0.6553) 0.0812 ....etc
Run Code Online (Sandbox Code Playgroud)
我想用c/c ++计算每个盒子相邻盒子的数量.我该怎么做?
例

在这张图片中,方框7的相邻方框总数为6,方框3为3.如何使用c ++计算它们?
使用新值进行编辑和更新
让我们尝试16个值 -
1 0.0000 0.0000 0.8147 0.1355
2 0.8147 0.0000 1.0000 0.1355
3 0.8147 0.1355 0.9058 0.8350
4 0.0000 0.1355 0.1270 0.9689
5 0.9058 0.1355 0.9134 0.2210
6 0.9058 0.8350 1.0000 1.0000
7 0.8147 0.8350 0.9058 1.0000
8 0.1270 0.1355 0.6324 0.3082
9 0.1270 …Run Code Online (Sandbox Code Playgroud) 我有一个简单的箱形图用于我的数据使用R ..
boxplot (Error~Code, DataFrame1, xlim = c(0, 27),
xlab="set Code",ylab="Error", boxwex=0.75, cex.axis=0.3)
Run Code Online (Sandbox Code Playgroud)
我想在2个定义的y值之间绘制一个透明的矩形:( - 50)和(100)!
我在上一个脚本之后尝试使用函数rect,如下所示:
rect(0,-50,27,100, col= 'tomato2', density=10)
Run Code Online (Sandbox Code Playgroud)
但这并没有给我一个透明的均匀彩色矩形!
有人可以帮助我吗?到目前为止,我差不多花了2个多小时没有成功.
提前谢谢了!
这是一个与语言无关的问题.给定矩形的尺寸l,t,w,h(左,顶部,宽度,高度)和一个点x,y,如何找到矩形周长上的最近点到该点?
我试图在Lua中解决它,但任何其他语言都可以.到目前为止,这是我的最大努力:
local function nearest(x, a, b)
if a <= x and x <= b then
return x
elseif math.abs(a - x) < math.abs(b - x) then
return a
else
return b
end
end
local function getNearestPointInPerimeter(l,t,w,h, x,y)
return nearest(x, l, l+w), nearest(y, t, t+h)
end
Run Code Online (Sandbox Code Playgroud)
这适用于周边之外或周边本身.但对于周界内的点,它会失败(它只会返回x,y)
我的直觉告诉我解决方案应该很简单,但我似乎没有找到它.
如何在矩形的中心添加文本?我一直在寻找并没有找到办法做到这一点.
见下面的课程:
public class Agent extends Rectangle{
public Agent() {
setWidth(60);
setHeight(60);
setArcWidth(60);
setArcHeight(60);
setFill(Color.BLUEVIOLET.deriveColor(0, 1.2, 1, 0.6));
setStroke(Color.BLUEVIOLET);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
边界框和矩形之间有什么区别?
这个问题是关于Unity 3D的Bounds和Rect类的,但我对一般答案更感兴趣.
特别:
terminology rectangles bounding-box unity-game-engine difference
我有不同尺寸的小矩形(1cm x 2xm,2cmx3cm,4cm*6cm等).不同类型矩形的数量可根据情况而变化.每种类型的不同矩形可以具有不同数量的计数.
我需要创建一个包含所有这些小矩形的大矩形,这些小矩形只能放在边缘上.没有轮换.理想情况下,最终的外部矩形应该是方形的.X~Y.并非所有边缘都需要填满.较小的矩形之间可能存在间隙.图片示例:http:
//i.stack.imgur.com/GqI5z.png
我正在尝试编写一个代码,找出可以形成的最小可能区域.
我有一个算法循环所有可能的位置,以找出可能的最小区域.但是,随着不同类型矩形的数量和矩形数量的增加,这需要很长的运行时间.即2种类型的矩形,每种都有100 +矩形.8循环.那将是~100 ^ 8次迭代
有关更好和更快算法的任何想法,以计算最小可能区域?代码是在python中,但任何算法概念都可以.
for rectange_1_top_count in (range(0,all_rectangles[1]["count"]+1)):
for rectange_1_bottom_count in range(0,all_rectangles[1]["count"]-rectange_1_top_count+1):
for rectange_1_left_count in (range(0,all_rectangles[1]["count"]-rectange_1_top_count-rectange_1_bottom_count+1)):
for rectange_1_right_count in ([all_rectangles[1]["count"]-rectange_1_top_count-rectange_1_bottom_count-rectange_1_left_count]):
for rectange_2_top_count in (range(0,all_rectangles[2]["count"]+1)):
for rectange_2_bottom_count in (range(0,all_rectangles[2]["count"]-rectange_2_top_count+1)):
for rectange_2_left_count in (range(0,all_rectangles[2]["count"]-rectange_2_bottom_count-rectange_2_top_count+1)):
for rectange_2_right_count in [(all_rectangles[2]["count"]-rectange_2_bottom_count-rectange_2_left_count-rectange_2_top_count)]:
area=calculate_minimum_area()
if area< minimum_area:
minimum_area=area
Run Code Online (Sandbox Code Playgroud) 我的学校作业遇到了麻烦.我有一个巧克力棒,由黑色,白色或黑白(混合)方块组成.我应该将它分为两组,一组只有白色或黑白色,另一组只有黑色或黑色和白色.将巧克力棒分开意味着沿着分隔各个方块的线水平或垂直地开裂.
鉴于巧克力棒的布局,我要找到一个最佳的分区,将黑色和白色立方体分开并产生尽可能少的碎片,巧克力棒不大于50x50正方形.
巧克力条在标准输入上定义如下:第一行由两个整数M(巧克力条中的行数)和N(列数)组成,然后有M列,每列包含N个字符,表示各个方块(0 -black,1-white,2-mixed)
最佳除法的一些例子,它们的输入分别(正确的输出是3和7):
3 3
1 1 2
1 2 0
2 0 0
4 4
0 1 1 1
1 0 1 0
1 0 1 0
2 0 0 0
Run Code Online (Sandbox Code Playgroud)
我的问题是我设法找到了一个解决方案,但我使用的算法速度不够快,如果巧克力棒像这样大,例如:
40 40
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
0 0 0 …Run Code Online (Sandbox Code Playgroud) rectangles ×10
algorithm ×4
geometry ×3
bounding-box ×2
math ×2
area ×1
awt ×1
boxplot ×1
c ×1
c++ ×1
difference ×1
java ×1
javafx ×1
minimization ×1
placement ×1
plot ×1
r ×1
rotation ×1
shape ×1
simulation ×1
terminology ×1
transparent ×1