【问题标题】:A hatching algorithm using lines parallel to X-axis使用平行于 X 轴的线的阴影算法
【发布时间】:2018-11-24 07:58:53
【问题描述】:

我需要一个算法来孵化一个平行于 X 轴线的随机多边形。 我开始写我认为的解决方案。 我的算法实现是这样的(粗体步骤可能不正确)

  1. 使用多边形的 minY 和 maxY 确定线条的 Y 轴水平
  2. 为每个 Y 轴级别确定交叉点的 X 坐标。
  3. 对每个级别的交叉点的 X 进行排序
  4. 为每对 X 在每个级别上画线

这是结果:result 我需要一种方法来确定多边形内部是什么,什么不是,或者至少是什么算法。
(我知道这是一个现有的算法,但我在任何地方都找不到) p>

【问题讨论】:

  • 你希望多边形有自相交吗?
  • 你没有期望它可以是任何一种

标签: java algorithm graphics


【解决方案1】:
  1. 使用多边形的 minY 和 maxY 确定线条的 Y 轴水平
  2. 为每个 Y 轴级别确定交叉点的 X 坐标。
  3. 对每个级别的交叉点的 X 进行排序
  4. 为每对 X 在每个级别上画线

你的想法是对的。假设对于第 3 步,您有一个 xs = [x0, x1, x2, x3] 列表。然后你需要画线从(x0, y)(x1, y)和从(x2, y)(x3, y)。你不想在(x1, y)(x2, y) 之间画一条线。

如果你仔细观察模式,你应该能够概括出一种算法来绘制线段。

【讨论】:

    【解决方案2】:

    对于防弹解决方案:

    For all equally spaced Y in the range Ymin to Ymax:
        Try all edges PiPj in turn (j is the successor of i):
            if (Y >= Yi) != (Y >= Yj):
                There is an intersection, compute and store the corresponding X
        Sort the X's left to right
        Draw all segments (X[2i], Y) to (X[2i+1], Y)
    

    一定要如上写交集条件,这样可以保证所有情况下都是偶数。


    对于多边的多边形,当您扫描整个多边形的每一层时,这是非常低效的。一种更有效的方法是使用扫描线方法:通过增加最低端点的纵坐标对边缘进行排序。然后当你增加 Y 时,你将维护一个与当前 Y 相交的边列表。每次增加 Y 时,删除具有较低上端点的边,并插入具有较低下端点的边(如果边满足这两个条件,就跳过了)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-07
      • 2020-12-26
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多