使用缩放图块最大化矩形区域覆盖范围的算法

2024-02-05

I have N需要放置在固定大小的矩形表面(工具箱)内的可扩展方形图块(按钮)。我想以相同的尺寸呈现所有按钮。

我怎样才能解决瓷砖的最佳尺寸,以提供被瓷砖覆盖的矩形表面的最大面积。


Let W and H是矩形的宽度和高度。

Let s是正方形的边长。

然后是方格数n(s)你可以放入矩形的是floor(W/s)*floor(H/s)。你想要找到最大值s为此n(s) >= N

如果你绘制方格数s你将得到一个分段常数函数。不连续性位于值处W/i and H/j, where i and j遍历正整数。

你想找到最小的i为此n(W/i) >= N,同样最小的j为此n(H/j) >= N。称这些最小值为i_min and j_min。那么最大的W/i_min and H/j_min is the s你要的那个。

I.e. s_max = max(W/i_min,H/j_min)

To find i_min and j_min,只需进行强力搜索:对于每个,从 1 开始,测试并递增。

如果 N 很大,则搜索可能会令人不快。i's and j从1开始(虽然很难想象性能会有什么明显的差异)。在这种情况下,我们可以如下估计起始值。首先,对瓷砖面积的大致估计是W*H/N,对应于一侧sqrt(W*H/N). If W/i <= sqrt(W*H/N), then i >= ceil(W*sqrt(N/(W*H))), 相似地j >= ceil(H*sqrt(N/(W*H)))

所以,不要开始循环i=1 and j=1,我们可以从以下位置开始:i = ceil(sqrt(N*W/H)) and j = ceil(sqrt(N*H/W)))。 OP建议round效果比ceil——最坏的情况是一次额外的迭代。

下面是用 C++ 编写的算法:

#include <math.h>
#include <algorithm>
// find optimal (largest) tile size for which
// at least N tiles fit in WxH rectangle
double optimal_size (double W, double H, int N)
{
    int i_min, j_min ; // minimum values for which you get at least N tiles 
    for (int i=round(sqrt(N*W/H)) ; ; i++) {
        if (i*floor(H*i/W) >= N) {
            i_min = i ;
            break ;
        }
    }
    for (int j=round(sqrt(N*H/W)) ; ; j++) {
        if (floor(W*j/H)*j >= N) {
            j_min = j ;
            break ;
        }
    }
    return std::max (W/i_min, H/j_min) ;
}

上面的内容是为了清楚起见而写的。代码可以大大收紧,如下所示:

double optimal_size (double W, double H, int N)
{
    int i,j ;
    for (i = round(sqrt(N*W/H)) ; i*floor(H*i/W) < N ; i++){}
    for (j = round(sqrt(N*H/W)) ; floor(W*j/H)*j < N ; j++){}
    return std::max (W/i, H/j) ;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用缩放图块最大化矩形区域覆盖范围的算法 的相关文章

  • 如何使用 JavaScript 选择预节点/块中的文本?

    我了解不允许 JS 将任意文本复制到剪贴板背后的安全原因 但是是否有一种方法可以通过单击按钮来选择预节点中的文本 类似于 select 函数在输入中的工作方式 我不是在寻找复制到剪贴板的 jQuery 插件 我只想突出显示预块中的文本 以便
  • 如何创建像谷歌位置历史记录一样的Android时间轴视图?

    我想设计像谷歌位置历史这样的用户界面 我必须为我正在使用的应用程序复制此 UIRecyclerView 每行都是水平的LinearLayout其中包含右侧的图标 线条和视图 该线是一个FrameLayout具有圆形背景和半透明圆圈Views
  • 数量重新分配逻辑 - 具有外部数据集的 MapGroups

    我正在研究一种复杂的逻辑 需要将数量从一个数据集重新分配到另一个数据集 在例子中我们有Owner and Invoice 我们需要从数量中减去Invoice准确地Owner匹配 在给定汽车的给定邮政编码处 减去的数量需要重新分配回同一辆车出
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • 我正在尝试寻找“调酒师算法”

    我正在解决旧编程竞赛中的一些示例问题 在这个问题中 我们输入了我们有多少调酒师以及他们知道哪种配方 每杯鸡尾酒的制作时间为 1 分钟 我们需要计算是否可以在 5 分钟内使用所有调酒师完成订单 解决这个问题的关键是尽可能高效地分配鸡尾酒 这就
  • 面向对象编程语言中的引用默认情况下是否应该不可为空? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何将 Jfreechart(饼图)添加到 netbeans 的面板中

    我正在使用 netbeans gui 编辑器 并且正在尝试添加一个本身位于内部框架中的 Jfreechart 并且这个内部框架我想将其添加到面板中 正如您在此图中看到的那样 抱歉 我无法直接发布图像 因为我新手 http www flick
  • WPF - 路径几何...有没有办法绑定数据属性?

    我有一个ControlTemplate作为 气泡 弹出窗口AdornerLayer给定的控制 它工作正常 但我需要能够计算它应该显示的位置 中间 底部 代替
  • 将名称字符串编码为唯一的数字

    我有一大堆名字 数以百万计 他们每个人都有一个名字 一个可选的中间名和一个姓氏 我需要将这些名称编码为唯一代表这些名称的数字 编码应该是一对一的 即一个名称只能与一个数字相关联 一个数字只能与一个名称相关联 对此进行编码的明智方法是什么 我
  • 生产代码中的 LRU 实现

    我有一些 C 代码 需要使用 LRU 技术实现缓存替换 目前我知道两种实现LRU缓存替换的方法 每次访问缓存数据时使用时间戳 最后比较替换时的时间戳 使用缓存项的堆栈 如果最近访问过它们 则将它们移动到顶部 因此最后底部将包含 LRU 候选
  • 线程输出到 GUI 文本字段

    我试图在 GUI 的 TextField 中输出 但我得到的只是线程信息 这只是完整代码的一小部分 但完整版本也有同样的问题 完整版本有 5 个不同的线程同时运行 任何帮助或建议将不胜感激 public class O21 implemen
  • 来自另一个类的 Qt C++ GUI 调用

    我通过 gui 拖放创建了一个按钮和一个文本浏览器 UI 以及单击按钮功能是在 mainwindow cpp 中创建的 有一个 main cpp 但这是无关紧要的 因为在单击开始按钮之前程序不会启动 include mainwindow h
  • 如何使用 python 有效地找到两个大文件的交集?

    我有两个大文件 它们的内容如下所示 134430513125296589151963957125296589 该文件包含未排序的 id 列表 某些 id 可能会在单个文件中出现多次 现在我想找到路口两个文件的一部分 这就是两个文件中都出现的
  • 欧拉项目 45

    我还不是一名熟练的程序员 但我认为这是一个有趣的问题 我想我应该尝试一下 三角形 五边形 六边形 数字由以下生成 公式 三角形 T n n n 1 2 1 3 6 10 15 五边形 P n n 3n 1 2 1 5 12 22 35 六角
  • 使用 A 星查找路径的启发式函数

    I am trying to find a optimal solution for the following problem 每个节点内表示的数字表示为 x y 一个节点的相邻节点总是有一个y值为 当前节点 y 值 1 更改的成本为 1
  • 如何在 Unity 中对齐“轨道”或模块化对象?

    我正在开发一个简单的游戏 用户可以在其中放置不同但模块化的对象 例如 轨道 道路等 我的问题是 当将一个物体靠近另一个物体时 如何匹配和放置不同的物体 我的第一种方法是为每个模块对象创建一个隐藏的子对象 一个盒子 并将其放在可以放置其他对象
  • setSize() 不起作用?

    我有一个程序 需要两个按钮 一个是常规按钮 另一个具有根据鼠标悬停而变化的图片 目前 由于图片很大 JButton自定义也很大 我可以更改自定义的大小并保持图像 和翻转图像 成比例吗 我尝试过 setSize 但它没有任何作用 对于任何反馈
  • 压缩很多小字符串的算法?

    我正在寻找一种压缩小 ASCII 字符串的算法 它们包含大量字母 但也可以包含数字和很少的特殊字符 它们很小 平均约为 50 100 字节 最多 250 个字节 例子 Android show EditText setError above
  • 触摸屏上最小的按钮尺寸

    我参与为医疗设备编写触摸屏应用程序 该程序类似于信息亭 因为用户无法访问开始菜单等 并且用户将使用屏幕键盘在他们需要的罕见情况下键入任何文本 规格屏幕尺寸为 1280x1024 问题是 一个合理的界面的最小可触摸按钮尺寸是多少 我认为美国一
  • 通过排列四个给定数字找到最大可能时间 HH:MM

    我最近为了工作晋升而参加了编码测试 这是我真正遇到的任务之一 我想知道什么是最好的方法来做到这一点 我使用了大量的 if 和 if else 这不是最干净的解决方案 但完成了工作 我被问到的问题是 将 4 个数字格式化为 24 小时时间 0

随机推荐

  • @State 的限制

    我在一些文章中看到 state有很多限制 我们不应该将它与复杂的模型一起使用 最好将它与简单的属性 如 string bool 等 一起使用 我们应该在视图本身内部使用它 我尝试制作一个结构模型 并在内容视图 ParentView 中用 s
  • 在 iis 上托管基本 html 网站

    我有一个基本网站 只有 html js 和 css 文件 我想将其托管在本地计算机上的 IIS 上以进行测试 当我直接将其作为文件在计算机上运行时 该网站运行良好 我使用这些文件所在的目录在 IIS 上添加了一个网站 但是当我尝试启动它时
  • Android 中的多个 HTTP 连接(分段/群下载)下载同一文件

    我目前正在为 Android 创建一个下载管理器 为了优化下载 我需要使用与服务器的多个连接来下载相同的文件 即 与 Windows 中的 Internet 下载管理器中使用的技术相同 问题是我不知道如何创建多个 HTTP 连接并下载相同的
  • 如何设计响应的打字稿模型?

    如何在得到以下响应的打字稿中设计我的模型 data name XYZ id 1 name Abc id 2 我尝试了什么 export class responseModel
  • 自引用 has_many :through 和自定义 :primary key 问题

    我正在尝试在 Rails 2 3 8 应用程序 ruby 1 8 7 中模拟 twitter 模型 class Connection lt ActiveRecord Base belongs to subject foreign key g
  • 以一种形式上传多个文件 MVC4

    我正在尝试在一张表单上上传多张图片 using Html BeginForm Create AdminRestaurants FormMethod Post new enctype multipart form data div class
  • 为什么 CSS 填充会增加元素的大小?

    我试图给我的 div 和 textarea 一些填充 当我这样做时 它会增加元素的大小 而不是缩小元素内部的内容区域 有什么办法可以实现我想做的事情吗 你可以添加box sizing border box到容器元素 以便能够指定在向元素添加
  • Linux中访问另一个进程虚拟内存(调试)

    Linux上gdb如何访问另一个进程的虚拟内存 都是通过 proc完成的吗 Linux上gdb如何访问另一个进程的虚拟内存 都是通过 proc完成的吗 在Linux上读取内存 1 如果要读取的字节数小于3 sizeof long 或文件系统
  • Scala中递归删除目录

    我正在编写以下内容 使用 Scala 2 10 和 Java 6 import java io def delete file File if file isDirectory Option file listFiles map toLis
  • 在某些设备上,两个活动之间的拖放功能不起作用

    我使用以下代码将视图从应用程序中的一个活动拖动到另一个活动 知道拖动开始时第二个活动 接收放置事件 未创建 活动 它适用于 三星 Note 3 Android 5 API 21 三星 Note 4 Android 6 0 1 API 23
  • 从我的应用程序捕获 iPhone 屏幕并录制视频

    我只是好奇创建一个应用程序来录制 iPhone 屏幕视频或捕获 iPhone 屏幕图像 我知道苹果不允许应用程序商店上架此类应用程序 而且我无意这样做 我可以将我的应用程序上传到Cydia如果我愿意的话 但我目前的目标只是开发一个具有捕获
  • 单核处理器上的单线程与多线程编程

    有人可以解释一下编写在单核处理器上运行的多线程代码是否真的有任何优势吗 例如 一种处理文档页面的方法 使得页面与上述代码段是互斥的 乍一看 这似乎没有优势 因为真正的多线程是不可能的 也就是说 操作系统无论如何都必须对线程进行上下文切换 我
  • 下拉列表选定值

    我已经使用 Web 服务创建了国家 地区的下拉列表 并且尝试将下拉列表选择添加到 sql 数据库中 但是当我在插入语句中使用 ddlCountry SelectedValue 执行此操作时 只有下拉列表中的第一个值是出现在表中 我应该使用
  • 语音合成器“输入字符串的格式不正确”

    这是我的代码 string message Hello world SpeechSynthesizer synth new SpeechSynthesizer Prompt prompt new Prompt message synth S
  • IE9奇怪的表格问题

    大家好 我想知道是否有人可以提供帮助 因为我一片空白 我有一个使用 css 设计的表格 除了 IE9 甚至其他 ie 版本 之外 它在所有浏览器中都呈现良好 我不知道为什么 我什至尝试删除所有 css 但它仍然发生 有什么想法吗 Examp
  • VirtualDocumentRoot 域和子域

    普通域和子域是否可以有 VirtualDocumentRoot http www example com or http example com Uses var www example com And http example com U
  • UI 自动化 - #32770(对话框)在 Insepct.exe 中显示,但不在 VisualUIAVerifyNative.exe 中显示

    我正在尝试使用 UI Automation C API 自动化子窗口 ClassName 的对话框为 32770 目标子窗口显示在Spy and 检查程序 但不显示在VisualUIAVerifyNative 它也无法通过 Automati
  • 在其参数结构上重载 C/C++ 预处理器宏

    我想编写一个预处理器宏 如果它的参数是带括号的标记元组 它会做一件事 如下所示 MY MACRO x y 如果它只是一个令牌 还有其他东西 如下所示 MY MACRO x 那可能吗 如何区分空格分隔的标记的数量 即MY MACRO x an
  • Android 模块与风味之间的区别

    android模块和风格之间的主要区别是什么 来自模块定义https developer android com studio projects add app module html https developer android com
  • 使用缩放图块最大化矩形区域覆盖范围的算法

    I have N需要放置在固定大小的矩形表面 工具箱 内的可扩展方形图块 按钮 我想以相同的尺寸呈现所有按钮 我怎样才能解决瓷砖的最佳尺寸 以提供被瓷砖覆盖的矩形表面的最大面积 Let W and H是矩形的宽度和高度 Let s是正方形的