我将编写一个程序,在最小区域内重新排列句子的字母。我要编写这个应用程序的工具并不重要。问题是我几乎不知道如何做到这一点。
我想要这样的东西:
是否有任何算法可以在最小区域内对某些表面进行排序(假设每个字母都是多边形表面)?
我将编写一个程序,在最小区域内重新排列句子的字母。我要编写这个应用程序的工具并不重要。问题是我几乎不知道如何做到这一点。
我想要这样的东西:
是否有任何算法可以在最小区域内对某些表面进行排序(假设每个字母都是多边形表面)?
在本文中,您可以找到 Wordle 的见解,这是一个制作漂亮标签云的工具。它对装箱问题进行了随机贪心算法逼近。
这一点都不容易……它与被证明是 NP-HARD 的“装箱问题”有关。
此外,您的问题涉及非矩形物体,所以它有点难,但不是数量级。
您应该采用优化算法方法,例如遗传算法或此类...
谷歌的“Bin Packing 2D”会产生很多有用的链接和文章。
我对这种算法的方法是遗传算法。这将是 Java 中的示例数据结构示例。
public class Individual{
char letter;
double x;
double y;
double rotation;
}
public class Population{
private Individual[] individuals;
public Population(String s) {
individuals = new Individual[s.length()];
for(int i = 0; i < s.length(); i++ {
Individual individual = new Individual();
individual.letter = s.charAt(i);
// set random x, y, and rotation;
individuals[i] = individual;
}
}
// Calculate Fitness: (1/Totalspace needed ) - Overlapping Space
// Envolve Population
}