图像镶嵌图使用一组预定义的平方图像来构建更大的图像(例如此处).有很多解决方案,实现这种效果是非常微不足道的.但是,由于以下限制,它变得更加困难:
我试图使古老的镶嵌艺术自动化,特别是Opus palladianum技术.
我的想法是使用模拟退火或其他一些启发式来优化每个不规则马赛克的位置和旋转,在每次迭代中交换两个,试图最小化一些反映与目标图像的相似性的能量函数以及" 包装 "瓷砖.我试图在python中实现这一点,任何想法和帮助将不胜感激.
例:
我有一个面板,我可以并排放置几个不同尺寸和颜色的迷你面板,它们应该占据整个父面板(水平).
为此我使用BorderLayout(用于父面板),BoxLayout用于子面板,我放置所有迷你面板(参见下面的代码).它可以正常工作,并且可以正常调整大小和一切.但是,随着迷你面板数量的增加,会出现奇怪的行为:父面板末端出现空白区域.

我想我发现这是布局管理器中的拉伸错误,因为为了拉伸面板,布局管理器尝试向每个迷你面板添加一个像素.但是,当迷你面板的数量很大时,向每个面板添加一个像素将导致添加许多像素并超出父级的大小.因此,布局管理器最终不会向任何迷你面板添加任何像素,从而导致空白空间.
这是我的SSCCE :(尝试运行,拉伸窗口,以了解问题)
package com.myPackage;
import java.awt.*;
import java.util.Vector;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ColoredPanels extends JPanel
{
/* Content information. */
private Vector<Integer> partitions;
private Vector<Color> colors;
/* Panel where the content panels will go. */
private JPanel contentHolder;
private final int defaultHeight = 20;
public ColoredPanels(Vector<Integer> partitions, Vector<Color> colors)
{
assert partitions != null;
assert !partitions.isEmpty();
assert colors != null;
assert !colors.isEmpty();
assert colors.size() == partitions.size();
this.partitions = partitions;
this.colors = …Run Code Online (Sandbox Code Playgroud)