我正在尝试找到计算最大(面积)矩形的最佳方法,该矩形可以包含在旋转的矩形内.
一些图片应该有助于(我希望)可视化我的意思:

给出输入矩形的宽度和高度,以及旋转它的角度.输出矩形不会旋转或倾斜.
我正沿着漫长的路线往下走,我甚至不确定它是否会处理角落的情况(没有双关语).我确信这有一个优雅的解决方案.有小费吗?
编辑:输出矩形点不一定要触摸输入矩形边.(感谢E先生)
假设我有一个块网格,7x12.我们使用颜色'*','%','@'和一个空单元' - '.
1 2 3 4 5 6 7
- - - - - - - 1
- - - - - - - 2
% % - - - - - 3
% % - - - - * 4
% % - - - @ % 5
@ @ @ - - @ % 6
@ @ * * * - * 7
* * * % % % % 8
% @ @ % * * …Run Code Online (Sandbox Code Playgroud) 给定一个二进制矩阵,我找出了所有1s 的最大尺寸方形子矩阵.
例如,考虑以下二进制矩阵:
0 1 1 0 1
1 1 0 1 0
0 1 1 1 0
1 1 1 1 0
1 1 1 1 1
0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
所有设置位的最大平方子矩阵是
1 1 1
1 1 1
1 1 1
Run Code Online (Sandbox Code Playgroud)
我在网上搜索解决方案,然后找到了构建辅助矩阵的关系:
If M[i][j] is 1 then
S[i][j] = min(S[i][j-1], S[i-1][j], S[i-1][j-1]) + 1
Else /*If M[i][j] is 0*/
S[i][j] = 0
Run Code Online (Sandbox Code Playgroud)
M[][]原始矩阵在哪里,s[][]是辅助矩阵? 我有一个基本代表一个屏幕的坐标系.
我有任意数量的职位.例如:
population = [
{x: 100.44, 200.54},
{x: 123.45, 678.9},
{x: 1300.23, 435.81},
{x: 462.23, 468.37},
{x: 956.58, 385.38},
];
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种找到最无人居住点的算法.
白色迷你圆圈代表人口和红色Xs标记点,对我来说似乎非常无人居住:
我的目标是运行一个动画,随机将所有这些白色迷你圆圈移动到随机方向,一旦圆圈离开屏幕,它就会被传送到最无人居住的地点,这样大空空间的数量就会减少.
我试图通过计算从每个整数坐标到每个圆的距离之和,然后选择具有最高距离和的坐标来实现这一点.仅此一点似乎已经非常耗费CPU,但我注意到这个算法会使圆圈传送到我的坐标系的边界.所以我还添加了从每个整数坐标到每个边界整数坐标的距离之和.那时,脚本基本上冻结了.所以这绝对不是正确的方法.
我的想法已经不多了.我想我不需要一个完美的算法,而是一个在精度和性能之间保持平衡的算法.最后,我希望能够在1920x1080画布上每秒多次运行该算法,其中大约有80个这样的小环.理想情况下,算法会有一个参数来调整精度,从而调整它使用的CPU时间.
这是我上面提到的方法.我注释掉导致脚本冻结的行:
let circles = [
{x: 60.44, y: 190.54},
{x: 103.45, y: 18.9},
{x: 390.23, y: 135.81},
{x: 302.23, y: 28.37},
{x: 56.58, y: 85.38},
]
function getDistance(p1, p2) {
return Math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2)
}
function drawCircle(ctx,x,y,r,c) {
ctx.beginPath()
ctx.arc(x, y, r, 0, 2 * Math.PI, …Run Code Online (Sandbox Code Playgroud)我正在寻找一种在凹面或凸面多边形内找到轴对齐矩形的方法.
我一直在寻找网络,我能找到的最接近的解决方案只适合凸多边形,而不是凹多边形.例如 -
说实话,我不是一个伟大的数学专家,所以我宁愿找到代码示例或代码库,但我想我可以自己处理一些数学,或者找人来帮助我.
如果解决方案也可以在Java中,那将是非常好的,但也许我太贪心了:P
编辑:回应罗素的评论,我正在添加更多信息.
有界矩形应尽可能大.矩形旨在包含其中的文本.最多1到4个字,支持文本换行.因此,如果它太薄,我会将文本垂直放置而不是水平放置.所以对于宽高比,我想它需要足够包含1-4个单词垂直或水平与自动换行.如果矩形很小,我可以调整文本大小,但最好是文本尽可能大.
另一个很好的要求是,如果多边形的一般方向是对角线,并且当对角线方向对齐时文本会更好,那么矩形不一定与轴对齐,而是与多边形的对角线.我想这个要求让这个变得非常棘手,但是如果你们认为它可能那么它会很棒!
我想我现在已经涵盖了所有的要求.:P
谢谢!
algorithm ×3
geometry ×2
c ×1
coordinates ×1
grid ×1
java ×1
javascript ×1
math ×1
matrix ×1
point ×1