我在图中有一系列节点。节点由用户放置在特定位置。保证节点不重叠,并且事实上,它们之间有一个空间缓冲区。这些节点相互连接,并且每条边在特定点处连接到节点。我需要绘制节点之间的边缘,以便边缘:
- (必填)不要与父节点重叠
- (理想情况下)不会重叠任何节点
我不担心边缘交叉。如果有 Javascript 的实现,那就加分了。我无法使用 Javascript 之外的任何库。
一种解决方案可以使用贝塞尔曲线 http://en.wikipedia.org/wiki/B%C3%A9zier_curve:
“贝塞尔曲线由一组控制点 P0 到 Pn 定义,
其中 n 称为其阶数(n = 1 表示线性,2 表示二次,等等)。第一个和最后一个控制点始终是终点的
曲线;然而,中间控制点(如果有的话)通常会
不在曲线上."
因此基本思想是使用父节点作为中间控制点。您还可以使用边缘点作为中间控制点以避免边缘重叠。
在维基文章中你可以找到nice动画 http://en.wikipedia.org/wiki/B%C3%A9zier_curve#Constructing_B.C3.A9zier_curves解释它。
For JavaScript 实现我查看了以下库:
-
jsdraw2d http://jsdraw2d.jsfiction.com/(LGPL 许可证)不错的演示 http://jsdraw2d.jsfiction.com/demo/curvesbezier.htm并得到很好的参考。也使用它来实现HTML5 和 SVG为了性能(jsdraw2dX http://jsdraw2dx.jsfiction.com/).
-
jsbezier http://code.google.com/p/jsbezier/在谷歌代码上
但如果你用谷歌搜索“javascript贝塞尔曲线库”你可以找到更多。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)