我试图将几个图像放在一个大图像中,我正在寻找一种能够最佳地确定放置的算法.图像无法旋转或调整大小,但生成的图像中的位置并不重要.
编辑:未添加调整大小约束
我正在寻找解决以下问题的指针:我有一组矩形,其高度已知,x位也是,我想以更紧凑的形式打包它们.使用一个小图画(所有矩形宽度相同,但宽度可能在现实生活中有所不同),我想,而不是.
-r1-
-r2--
-r3--
-r4-
-r5--
Run Code Online (Sandbox Code Playgroud)
就像是.
-r1- -r3--
-r2-- -r4-
-r5--
Run Code Online (Sandbox Code Playgroud)
所有提示将不胜感激.我不一定在寻找"最佳"解决方案.
我正在编写一些软件,其中每个位必须精确(它是CPU的),所以__packed非常重要.
typedef union{
uint32_t raw;
struct{
unsigned int present:1;
unsigned int rw:1;
unsigned int user:1;
unsigned int dirty:1;
unsigned int free:7;
unsigned int frame:20;
} __packed;
}__packed page_union_t;
Run Code Online (Sandbox Code Playgroud)
那是我的结构和结合.但它不起作用:
page_union_t p; //.....
//This:
p.frame=trg_page;
p.user=user;
p.rw=rw;
p.present=present;
//and this:
p.raw=trg_page<<12 | user<<2 | rw<<1 | present;
Run Code Online (Sandbox Code Playgroud)
应该创建相同的uint32.但他们并没有创造同样的东西.
有什么我看不出我的工会有问题吗?
我的问题非常类似于2D背包问题,或切割股票有一个例外......适合容器的矩形可以调整大小和裁剪.但是不允许轮换.
挑战是尽可能少地种植作物并填满整个容器(无任何间隙).
有没有人遇到过类似的算法.任何链接,伪代码非常赞赏.
保持问题通用,但我想应用它来组织固定大小的页面上的照片.
非常感谢
我正在尝试构建一个脚本,它将动态排列照片,就像拼贴一样,与http://lightbox.com/explore#spotlight上的内容非常类似.
我当然可以编写代码,用不同的照片集来处理每个案例,但我更愿意拥有能够处理任意数量照片的算法.这里解释的算法http://www.hpl.hp.com/techreports/2008/HPL-2008-199.pdf在第4章中看起来与我需要做的非常相似.在我的情况下,垂直和水平比率总是相同的.我会定义一个边界框,每个节点可以分割多少个级别.边界框将具有相同的水平照片比例.如果算法不能适合所有图像,我会返回一个级别并将其留在那里或从可用照片池中选择另一张照片.
我的问题非常类似于这个算法在屏幕上排列图像,但我不知道如何前进.任何进一步的指导或伪代码都会非常有用.
我需要将 n 个不同大小的矩形 (n<10) 打包成一个简单的多边形。我知道两种可能的解决方案:
将矩形装箱成矩形。那么问题就变成了在多边形中找到一个相当大的矩形。它不需要是最大的矩形,但它应该足够大,可以很好地近似多边形以填充这些小矩形。有什么算法可以做到这一点吗?
使用约束求解器。我知道的唯一 JavaScript 约束求解器是Cassowary。然而,它是一个线性的,在我看来,在一个简单的多边形内约束一个点不是一个线性约束。
有任何想法吗?
我有两个与在R中使用list相关的问题,我试图看看如何改进我天真的解决方案.我在这里看到过类似主题的问题,但那里描述的方法没有帮助.
MWE:
a <- c(1:5)
b <- "adf"
c <- array(rnorm(9), dim = c(3,3) )
Run Code Online (Sandbox Code Playgroud)
packedList <- list(a = a, b = b, c = c)但是,如果变量的数量(上面的问题中有三个a, b, c)很大(比如我们有20个变量),那么我目前的解决方案可能不是最好的.
从函数返回大量变量时,这个想法很有用.
MWE:给定packedList,提取变量a,b,c
例如:给定环境中的变量packedList,我可以如下定义a,b和c:
a <- packedList$a
b <- packedList$b
c <- packedList$c
Run Code Online (Sandbox Code Playgroud)
但是,如果变量的数量非常大,那么我的解决方案可能很麻烦.- 在谷歌搜索之后,我找到了一个解决方案,但我不确定它是否也是最优雅的解决方案.解决方案如下所示:
x <- packedList
for(i in 1:length(x)){
tempobj <- x[[i]]
eval(parse(text=paste(names(x)[[i]],"= tempobj")))
}
Run Code Online (Sandbox Code Playgroud) 你能帮我理解GTest和struct packing的内容吗?
问题似乎与在GTest中作为值参数化测试中的值使用时如何打包结构有关.采用直接的方法为每个值实例化一个结构会导致与未初始化值相关的valgrind错误.
这是有关的代码:
#include <gtest/gtest.h>
struct TestItem
{
const char * aString;
int anInt0;
int anInt1;
int anInt2;
};
class TestBase : public ::testing::Test, public ::testing::WithParamInterface<TestItem> {};
TEST_P(TestBase, TestAtoi)
{
TestItem item = GetParam();
std::cout << sizeof(TestItem) << std::endl;
ASSERT_FALSE(0); // actual test doesn't matter
}
INSTANTIATE_TEST_CASE_P(
TestBaseInstantiation,
TestBase,
::testing::Values(
TestItem { "0", 0, 0, 0 }
));
Run Code Online (Sandbox Code Playgroud)
当编译和链接时(我使用cmake构建GTest):
g++ gtest_valgrind.c -o gtest_valgrind -I gtest-1.7.0/include -L gtest-1.7.0/build -lgtest -lpthread -lgtest_main -std=c++11
Run Code Online (Sandbox Code Playgroud)
然后执行:
valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes ./gtest_valgrind
Run Code Online (Sandbox Code Playgroud)
生成以下输出:
==17290== …Run Code Online (Sandbox Code Playgroud) 在python中,可以这样显式地声明带有括号的元组:
>>> x = (0.25, 0.25, 0.25, 0.25)
>>> x
(0.25, 0.25, 0.25, 0.25)
>>> type(x)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
另外,在没有括号的情况下,python自动将其打包成一个不变的元组:
>>> x = 0.25, 0.25, 0.25, 0.25
>>> x
(0.25, 0.25, 0.25, 0.25)
>>> type(x)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)
是否有Pythonic样式来声明元组?如果是这样,也请参考相关的PEP或链接。
实现元组的“最终产品”没有区别,但是在带括号和不带括号的元组的初始化方式(在CPython中)之间是否有区别?
有没有办法看看在构建期间如何打包C结构?我已经阅读了几篇关于如何打包结构的类似帖子:
但我想知道是否有某种构建时生成的文件,它向我展示了如何打包结构?我尝试检查链接器生成的映射文件,但它没有此信息.
PS:我试图让一些微控制器通过UART相互通信,因为一个是16位而其他的是32位,每次更新这些结构时我都会遇到一些错误.
packing ×10
algorithm ×3
struct ×3
c ×2
rectangles ×2
binary-tree ×1
c++ ×1
cpython ×1
embedded ×1
googletest ×1
immutability ×1
javascript ×1
list ×1
photo ×1
polygon ×1
python ×1
r ×1
treemap ×1
tuples ×1
unions ×1
valgrind ×1