正在查找矩形外的网格起点

Finding grid start outside of rectangle

本文关键字:网格 起点 查找      更新时间:2023-10-16

我有一个"无限"的点网格,列之间的间距为dx,行之间的间距是dy。我有一个点,它是网格和矩形中的一个点。我需要得到矩形之外的第一行/列
类似:

*    *    *    *    *    *    *    *    .    .    .
   _____________________________
* |  .    .    .    .    .    . |  *    .    0    .
  |                             |
* |  .    .    .    .    .    . |  *    .    .    .
  |                             |
* |  .    .    .    .    .    . |  *    .    .    .
  |_____________________________|
*    *    *    *    *    *    *    *    .    .    .
.    .    .    .    .    .    .    .    .    .    .

我需要使用矩形的坐标、0的坐标和行/列的间距来获得*。所有内容都是浮点值。我试着用模量来做这件事,但它变得非常混乱和复杂,我宁愿不发布它。
我如何在c++中做到这一点?(我可以而且更喜欢使用c++11(
我需要它对它进行迭代,以获得矩形内的所有点(当我在点之间画线时,我也需要矩形外的点,并将线剪裁到矩形上(。

如果左下角坐标是(x,y(,那么您可以首先通过计算来重新调整它们的基准

double xb = x / dx;
double yb = y / dy;

然后你只需发言就可以到达这个重新设定的坐标系中的网格点:

xb = floor(xb);
yb = floor(yb);

最后,您将映射回原始坐标:

xb = xb * dx;
yb = yb * dy;

这是原始坐标系中的左下网格点,在矩形的左下角之外。

如果这没有意义,请考虑在dx=1,dy=1的特殊情况下,网格点与整数相对应,您可以通过floor((和ceil((获得"to"网格点。当dx和dy不同于1时,您首先除以它们以输入一个重新基准的坐标系,在该坐标系中,您可以使用floor((和ceil((来获取晶格点,然后映射回来。

要计算大于Y的X的最低倍数(假设X和Y为正int s:视情况而定(:

((Y / X) + 1) * X

如果你在开始之前加上奥利关于调整原点的建议,你就消除了否定的问题。

最后,您可以扩展上面的计算,以允许通过适当的投射进行浮点运算:

((int)(Y / X) + 1) * X

这现在返回浮点X大于浮点Y的第一个倍数。