我正在尝试在表面上动态布局一堆正方形(可能是 winform 应用程序、网页等),我正在尝试找出一个函数,其中
给定:
1.页面有固定宽度
2.正方形有固定的宽度
输入:函数的输入是:
The number of squares
输出:输出是一个包含以下内容的数组:
the "left" location of each square to lay them out so they are equally spaced out horizontally on the page.
我的程序是用 C# 编写的,但我想这个问题有两个部分
- 我想这更像是一个可以用任何编程语言解决的数学问题
- 用 C# 编写代码的最简单方法。
我现在更关注 #1,因为我认为一旦可以定义逻辑,那么 #2 可能会非常简单,但我仍然将问题标记为 C#,因为那是我的程序所在的内容。
这是一个例子:
假设表面的宽度为 800 像素。正方形是 50 像素宽
我正在寻找一些代码,根据所需的正方形数量,它会告诉我左边的像素应该在哪里
例如,如果我只有一个正方形,则左侧位置为 375,因为它是
(TOTAL WIDTH OF PAGE / 2) - (WIDTH OF SQUARE / 2)
(800 /2) - (50/2) or 400 - 25 - 375
如果我将正方形的左侧位置放在 375 处,那么它将完全居中放置在页面上
如果我有两个正方形,那就是
First one:
(TOTAL WIDTH OF PAGE / 4) - (WIDTH OF SQUARE / 2)
((800 / 4) * 1) - (50/2) or 200 - 25 - 175
Second One:
((800 / 4) * 3) - (50/2) or 600 - 25 - 575
如果我有三个正方形,那就是 175、375、575
我正在尝试看看是否有一个更通用的函数,我可以从中创建(相对于为每个方 block 数量使用硬编码逻辑),以便它适用于任何数量的方 block (我实际上拥有的最多将是 10,但我尽量不对其进行硬编码。我知道,如果我有超过 16 个正方形,那么即使它们并排放置,它们也不会水平固定在页面上,但这很好,因为我看不到一直到那个地步。
最佳答案
计算它的最简单方法是找出剩余的空间,然后将其除以方格总数 + 1
(pageWidth - totalSquareWidth)/(numberOfSquares + 1)
所以如果页面是 800px,并且有 3 x 50px,那么每个空间就是正方形
(800 - 150)/(3 + 1) = 162.5
然后要计算位置,只需将空格+前面的所有方格相加即可
squareNumber * space + ((squareNumber -1) * squareSize)
还有一些代码可以提供帮助(它是 java,但应该很容易适应)
public int[] getSquarePositions(int numberOfSquares)
{
int[] positions = new int[numberOfSquares];
int pageWidth = 800;
int squareSize = 50;
int space = (pageWidth - (squareSize * numberOfSquares)) / (numberOfSquares + 1);
for (int x = 0; x < positions.length; x++)
{
positions[x] = (x + 1) * space + (x * squareSize);
}
return positions;
}
关于c# - 使用 C#,确定页面上对象的 "left"位置以使其水平均匀分布的最佳逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718414/