有没有真正需要什么戏剧性超出绘图直接到笛卡尔坐标。简单的启发式算法可以用来处理路径,并且可能在大多数时间内达到最佳的最小角度数,但可能更经常是最短路径。所有这些都可以根据需要动态地完成,但是在保持图形精度的同时,不需要更加分散地将屏幕分离出来(像素应该保持最离散的水平),而不需要复杂的算法。
对于叠加层,只需将所有像素设置为线的颜色,并根据像素是否为线的一部分将Alpha通道位修改为透明或不透明。要确定哪些位是该行的一部分需要一些几何图形,但是一旦你拥有了一切,这是一块蛋糕。
要弄清楚如何在Alpha通道上绘制线条,您需要弄清楚线条的样式。你会做很多事情取决于风格。一种常见的风格是使用水平方向的直线和直角四分之一圆对齐的直线。
对于“避免”算法,当您只想避免代表节点的“盒子”时,这些算法不会太难实现......要将所有线条都消除一点,甚至连Visio都没有雇佣。为了避免盒子/节点,使用盒子边缘之间的中点(例如geo1和geo3之间的垂直边缘)很适合对称,然后选择一个简单的预定义距离以保持非连接线条(即线条没有连接到特定的盒子)远离箱子也运作良好。对此的一种通用算法很简单,但在这里描述有点过于冗长,但本质上是一组广义检查和开关,用于水平和垂直对齐线和四分之一圈。如果您最终希望得到关于如何做到这一点的更多细节,只需发表评论就可以了。
如果你正在寻找一些已经为你做的事情,你想要的连接类型和重新安排取决于应用程序,而不是很多人制作低需求或特定需求的工具。显然这种类型的软件已经存在,因为Visio和其他人使用它,但是不管它是否可以作为开放源代码或其他免费库的一部分提供,我不确定。
为1一个完整的网格可能是没有必要的,一个汉南网格的点连接和位,以避免应该足够我认为 – 2010-03-17 09:43:22
谢谢,我不想重新发明轮子,虽然我相信我们可以都提出了精细调整算法的近似值。我想知道有没有什么能够在一定程度上为你做到这一点? – ApplePieIsGood 2010-03-17 11:17:26
答案本身引入了一些不平凡的问题来处理(它解释了一个过程,但缺乏“如何”部分)。是否有“经典”算法来覆盖它? – gpilotino 2011-04-26 14:11:07