Actionscript 3 矢量图形洪水填充算法?

Actionscript 3 矢量图形洪水填充算法?,actionscript-3,language-agnostic,geometry,vector-graphics,flood-fill,Actionscript 3,Language Agnostic,Geometry,Vector Graphics,Flood Fill,我正在开发一个简单的绘图应用程序,我需要一个算法来进行洪水填充。 用户工作流程如下所示(类似于Flash CS,只是更简单): 用户在工作区上绘制直线。它们被视为向量,可以在绘制后进行选择和移动 用户选择“填充”工具,然后单击绘图区域。如果该区域在每个方向上都被线包围,则会对该区域应用填充 如果在应用填充后移动了线,则填充区域将相应更改 谁有好主意,如何实现这样的算法?主要任务基本上是确定点周围的线段。(并以某种方式存储此信息,以防线路移动) 编辑:解释图像:(画布中当然可以有其他行,这与填充算

我正在开发一个简单的绘图应用程序,我需要一个算法来进行洪水填充。
用户工作流程如下所示(类似于Flash CS,只是更简单):

  • 用户在工作区上绘制直线。它们被视为向量,可以在绘制后进行选择和移动
  • 用户选择“填充”工具,然后单击绘图区域。如果该区域在每个方向上都被线包围,则会对该区域应用填充
  • 如果在应用填充后移动了线,则填充区域将相应更改

    谁有好主意,如何实现这样的算法?主要任务基本上是确定点周围的线段。(并以某种方式存储此信息,以防线路移动)

    编辑:解释图像:(画布中当然可以有其他行,这与填充算法无关)

    编辑2:更困难的情况:


    EDIT3:我找到了一种用洞填充多边形的方法,现在主要的问题是,如何找到我的多边形?

    使用ActionScript,您可以使用
    beginll
    endFill
    ,例如

    pen_mc.beginFill(0x000000,100);
    pen_mc.lineTo(400,100);
    pen_mc.lineTo(400,200);
    pen_mc.lineTo(300,200);
    pen_mc.lineTo(300,100);
    pen_mc.endFill();
    

    Flash CS4还引入了对路径的支持:

    如果你想发疯并编写自己的洪水填充代码,那么维基百科有一个新的功能,但我认为这将是为了这些目的而重新发明atom。

    试试这个:

    函数返回ActionScript中两行之间的交点(如果有)。你需要把所有的线互相循环,才能得到所有的线


    当然,如果你打算填补这些分数,那么分数的顺序将非常重要——这可能会更难

    您正在寻找一种点定位算法。它不太复杂,但也不够简单,无法在这里解释。这本书中有一个很好的章节:

    当我到家的时候,我会拿到我的那本书,看看我能不能试试。你需要知道的只是很多细节。这一切归结为构建输入的DCEL,并在添加或删除行时维护数据结构。任何带有鼠标坐标的查询都将简单地返回组件的内部半边,这些半边尤其包含指向所有内部组件的指针,这正是您所要求的


    不过,有一件事是,你需要知道输入中的交点(因为如果你有相交线,你就无法构建梯形图),如果你能侥幸逃脱(即输入的线段足够少),我强烈建议你只使用简单的O(n²)算法(在不到1小时的时间内简单、可编码和可测试)。O(nlogn)算法需要几天的时间来编写代码,并为状态使用一个巧妙且非常简单的数据结构。然而,书中也提到了这一点,因此,如果你觉得能够胜任这项任务,你有两个理由购买它。这是一本关于一般几何问题的好书,因此,仅仅出于这个原因,任何对算法和数据结构感兴趣的程序员都应该有一本。

    我在考虑某种递归蛮力算法。从附近的一行开始,递归到它重叠的行,直到你回到第一行。你说的“递归到它重叠的行”是什么意思?递归函数是做什么的?对不起,我倾向于阅读人们在这里的评论。它经常会适得其反。@sydd生成的填充需要是矢量还是位图?@Nitesh我得到了hvidgaard所说的那本书,并实现了其中描述的点定位器算法。请注意,用于存储点的图形表示(DCEL)和数据结构与算法本身一样重要。Actionscript afaik中没有开源实现,但我可能会在某个时候开源。我的问题不是填充,而是如何确定要填充区域的边界。我将举个例子image@sydd-所以你想找出直线相交的地方,然后在里面填充?图像会有帮助,谢谢。@oliver emberton我认为这种方法行不通,你如何找到待填充区域内的闭合形状?(我添加了一个例子)@sydd-你是对的,我提交的所有代码都是查找线之间的相交坐标。要确定其中的形状更为复杂-我手头没有立即的解决方案。非常感谢,这似乎是一个很好的解决方案。不会有那么多的行,所以我认为这个简单的算法会起作用。DCEL:双连通边列表?