c# - 使用 C#,确定页面上对象的 "left"位置以使其水平均匀分布的最佳逻辑是什么?

标签 c# algorithm math layout

我正在尝试在表面上动态布局一堆正方形(可能是 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# 编写的,但我想这个问题有两个部分

  1. 我想这更像是一个可以用任何编程语言解决的数学问题
  2. 用 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/

相关文章:

c# - 更新面板或 Ajax 调用

java - 如何使用 toCharArray() 交换 java 字符串中的 2 个字母?

algorithm - 找出诱导子图是否完整的快速算法

php - 如何计算固定数量的 PayPal 费用 (2.9% + .30)?

c# - 具有日期文件夹的AppData中的Log4Net存储文件

c# - 如何在 C# 中制作 Observable Hashset?

math - 棘手的柏林噪声问题。 Grad 函数如何使用归一化向量?

c - 原始 C 中不完整的 beta 函数

c# - linq 到 xml。读。并分配给 ViewData..noob

java - 深度优先搜索 1 循环打印