【问题标题】:How to stop a incrementally moving rectangle at a point not divides Le with the increment?如何在不将 Le 除以增量的点处停止增量移动的矩形?
【发布时间】:2018-10-16 11:04:26
【问题描述】:

我有一个以 25 像素为增量移动的矩形。我需要在矩形的 x 位置等于 740 时停止矩形。740 不能被 25 整除,因此 x 位置永远不会落在 740 上。这个 25 的增量也是动态的,可以在 25-100 之间。问题与语言无关。

【问题讨论】:

  • 如果 25 的增量是动态的,那么您肯定可以将其更改为均匀地进入 740 的值吗?
  • 操作员正在使用滑块从 25-100 中选择增量。有点尴尬,它只在某些时候起作用:)。好吧,也许我只能允许落在 740 上的增量。
  • X := Min(X + Increment, 740);怎么样
  • 这取决于你的移动算法。 “我需要停止矩形”是指停止移动或停止移动矩形的算法?你说的很抽象。为什么简单的IF x < 740 THEN x := x + 25; END_IF; 不起作用?
  • 我喜欢 Toms 解决方案。谢尔盖,它将在 x = 750 处停止矩形。它将是 725,然后在下一次传递将是 750,然后它将停止。

标签: python pascal plc structured-text


【解决方案1】:

鉴于位置 740 有可能无法到达,但只能通过 +/- 增量进行近似,您必须考虑到这一点。

所以,测试可能是:

if (x >= 740-increment div 2) and (x <= 740+increment div 2) then... (got)

当然,如果您知道增量,这将有效。如果没有,您必须使用最大可能的增量。

另一种更长但也许更容易理解的方式是:

if x < 740 then if x+increment >= 740 then... (got)
if x > 740 then if x-increment <= 740 then... (got)

尝试比较这两种方法......玩得开心!

【讨论】:

    【解决方案2】:

    可能在增加位置变量之前实施检查。

        IF currentXpos + increment < 740 THEN
           currentXpos = currentXpos + increment;
        END_IF
    

    如果您希望位置至少为 740,只需使用

        IF currentXpos < 740 THEN
           currentXpos = currentXpos + increment;
        END_IF
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-12
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 2010-09-30
      相关资源
      最近更新 更多