zoukankan      html  css  js  c++  java
  • 【GDI+】一些规则多边形分离的问题

    在近期的工作中,需要做一样工作:将一些有规则的图形,进行适当的分离,以达到不重叠的问题。

    首先组成图形的点都可以是按照逆时针排好序的。

    规则的图形可以大致分为三类:

    A :两个点组成的线 或者 四个点组成的矩形

    B:多个点组成的矩形,其中一对边不包含别的A类中的矩形的边或者线的起止点,另外一边相反:包含A类中矩形的一条边或者线的起止点,可以称这一类边为“可移动边”

    C: 多个点组成的矩形,两个边都为“可移动边”。

    目前分离的方式:

    A类不移动,B、C类沿“可移动边”的垂直方向移动。

    目前存在的问题:

    A类不动:移动后,B、C类可能贴近了A

    B、C类:由于可能存在B、C类沿相同的向量移动,所以,如果移动前有重叠,则移动后,一样会重叠。

    改进方案:

    A类型中两个点的线,视为“可移动边”,进行移动

    A类型中的四个点组成的矩形,因为一般情况下,A类的矩形应该是在B、C类的内部,并且只有一对平行边在B、C类的“可移动边”上,所以可沿着一对平行边的方向向内部压缩一半

    B、C类中移动时,如果已经有了相同的移动向量后,此次移动,只移动一般的距离。

     

    画图好麻烦啊~ 有机会再上图了

    再改进:

    其实可以在平移完毕后,判断下有没有三点共线,有则将B、C类反向移动一半

    再想想怎么优化

    ps:

    在线绘制流程图工具:

    http://jgraph.github.io/mxgraph/javascript/examples/editors/workfloweditor.html

    在线PS:

    http://pixlr.com/editor/?loc=zh-cn

    每多学一点知识,就少写一行代码
  • 相关阅读:
    如何在main之后做一些事情
    Flash Component不显示[待解决]
    C++函数后面的throw()
    为甚马脚本中修改Text Sprite的Blend无效?
    sprite(channel).type的意义
    IDXGIDevice接口
    Director中调用AS3.0对象getVariable 附源码 20151228update
    MultiUser 03 – Serverside Script
    MultiUser02 使用Xtra和Server建立连接
    一部职场寓言——读《团队的五种机能障碍》
  • 原文地址:https://www.cnblogs.com/loveclumsybaby/p/3422236.html
Copyright © 2011-2022 走看看