sha*_*rky 24 java language-agnostic algorithm visualization venn-diagram
请注意:虽然赏金不再可用,但我仍然热衷于回答这个问题的人做出贡献; 我还在看着它,我在等着看是否有更好的答案.谢谢,请继续阅读......
我正在寻找一种方法来将描述约束网络的任意RCC类空间关系(或类似)转换为类似维恩图的图像.例如,RCC8中表示的约束网络:
W {EC} Y,X {TPP} Y,Z {NTPP} Y,Z {PO} X.
..可以用下图用圆形或方形区域表示:
..alternatively: 
是否有人知道软件至少可以通过编程方式(通过API)从类似RCC的约束规范生成这样的图表?
我知道这样的约束网络可能未被指定,从而排除了与任何单个此类图表的匹配(可能存在许多解决方案).理想情况下,我想通过能够生成可能的替代方案来处理这个问题,但现在可以求助于(并提出错误).
为了清楚起见,在这个问题中,我特别要求软件能够以声明的方式基于类似RCC的约束来计算图表布局.我不关心将RCC的DSL转换成其他语法的工具,也不关心特定的图像序列化格式或方法.我希望找到一个算法来处理最多六个唯一集的任意数量的约束.
注意: Graphviz(如下面提到的@vickirk)是一个图表布局软件包的例子,它类似于我所追求的.不幸的是,似乎Graphviz本身无法解决这个问题(但我很高兴被证明是错误的!).这似乎是一个非常难的问题.
pet*_*ter 19
谁需要后端?这是一个使用HTML/CSS/JS 的工作原型:
只需在字段中输入RCC8代码语法,然后单击按钮!

目前的一些限制:
编辑:它是如何工作的
基本上,这些图表显示了两个关系族:
然后有子类型或变体,如:
两者的基本概念,那种烤成HTML渲染的世界:
<div class="region"><div class="region"></div></div><div class="region"></div><div class="region"></div>我使用特殊类来处理这些变体(相当粗略地)摆动边缘以完成所需的布局:
<div class="region"><div class="region touches-parent"></div></div>孩子有触摸父母的负上边距)<div class="ven"><div class="region"></div><div class="region touches-parent"></div></div>添加一个包装器来触发子节点上的CSS - 第二个元素的左边距为负,与第一个元素重叠.)在jsfiddle中注释了一些静态标记,显示了我开始使用的结构.
为了完成功能循环,有一些代码将RCC8语句解析为A {XX} B部分,并尝试为每个部分呈现必要的标记.它会检查不重复的区域.之后我也会经历并将所有兄弟姐妹的高度设置为相同,这样可以确保它们重叠和/或正确对齐.
这段代码真的只是一个开始,它有它的自负.它基本上是一个线性图,这意味着它不会处理有复杂邻接的情况,例如:
A {EC} B, C {EC} B, D {EC} B
这些可以通过智能JS解析和更复杂的CSS来处理,但可能很快进入更多力导向布局的领域(例如,更智能的 气泡图).
小智 0
你评估过antlr吗?你可以为RCC8定义一个EBNF语法。使用antlr生成项目列表。此项目列表可用作VennMaster等软件的输入以绘制图表。
其他选项是谷歌图表,
http://bioinfogp.cnb.csic.es/tools/venny/index.html