锁定老帖子 主题:图形间连线算法
精华帖 (0) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-10
在方形变换位置的时候交点也可以跟着变化 条件:方形的长、宽、坐标、中心点都是已知的 如图: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-04-10
html画线?
|
|
返回顶楼 | |
发表时间:2008-04-10
这里似乎没有讨论图形学的。
http://xyz20003.iteye.com/blog/149102 我自己做了一个连线的,写得不好,参考参考 |
|
返回顶楼 | |
发表时间:2008-04-10
xyz20003 写道 这里似乎没有讨论图形学的。 http://xyz20003.iteye.com/blog/149102 我自己做了一个连线的,写得不好,参考参考 是html的 我其它的都实现了,现在是把线连在了每个图形的中点。 由于怕以后画图的时候,一个图形连的线太多看上去会不好看。 所以现在想改成这样的。想了2天了还是想不出来 |
|
返回顶楼 | |
发表时间:2008-04-10
图形是vml画的
|
|
返回顶楼 | |
发表时间:2008-04-10
我用svg画的,firefox-2以上就可以跑起来,
计算中心位置,求连线,然后判断与矩形边缘相交,取交点,然后描绘两交点之间的连线,我的想法很直接,很老土。 有个问题就是两个矩形相交的时候,这种求法会出错。 |
|
返回顶楼 | |
发表时间:2008-04-10
xyz20003 写道 我用svg画的,firefox-2以上就可以跑起来, 计算中心位置,求连线,然后判断与矩形边缘相交,取交点,然后描绘两交点之间的连线,我的想法很直接,很老土。 有个问题就是两个矩形相交的时候,这种求法会出错。 我现在就是算不出那个交点,数学不好 你的那个交点是怎么算出来的 |
|
返回顶楼 | |
发表时间:2008-04-10
private void initBeginAndEnd() { double fromX = from.getX(); double fromY = from.getY(); double fromW = from.getW(); double fromH = from.getH(); double toX = to.getX(); double toY = to.getY(); double toW = to.getW(); double toH = to.getH(); double xx1 = fromX + (fromW / 2); double yy1 = fromY + (fromH / 2); double xx2 = toX + (toW / 2); double yy2 = toY + (toH / 2); if (from != to) { Line fromLine = new Line(xx1, yy1, xx2, yy2); Rect fromRect = new Rect(fromX, fromY, fromW, fromH); Point fromCrossPoint = fromRect.getCrossPoint(fromLine); if (fromCrossPoint != null) { this.x1 = fromCrossPoint.getX(); this.y1 = fromCrossPoint.getY(); } else { this.x1 = xx1; this.y1 = yy1; } Line toLine = new Line(xx1, yy1, xx2, yy2); Rect toRect = new Rect(toX, toY, toW, toH); Point toCrossPoint = toRect.getCrossPoint(toLine); if (toCrossPoint != null) { this.x2 = toCrossPoint.getX(); this.y2 = toCrossPoint.getY(); } else { this.x2 = xx2; this.y2 = yy2; } } else { this.x1 = xx1; this.y1 = yy1; this.x2 = xx2; this.y2 = yy2; } } |
|
返回顶楼 | |
发表时间:2008-04-10
xyz20003 写道 private void initBeginAndEnd() { double fromX = from.getX(); double fromY = from.getY(); double fromW = from.getW(); double fromH = from.getH(); double toX = to.getX(); double toY = to.getY(); double toW = to.getW(); double toH = to.getH(); double xx1 = fromX + (fromW / 2); double yy1 = fromY + (fromH / 2); double xx2 = toX + (toW / 2); double yy2 = toY + (toH / 2); if (from != to) { Line fromLine = new Line(xx1, yy1, xx2, yy2); Rect fromRect = new Rect(fromX, fromY, fromW, fromH); Point fromCrossPoint = fromRect.getCrossPoint(fromLine); if (fromCrossPoint != null) { this.x1 = fromCrossPoint.getX(); this.y1 = fromCrossPoint.getY(); } else { this.x1 = xx1; this.y1 = yy1; } Line toLine = new Line(xx1, yy1, xx2, yy2); Rect toRect = new Rect(toX, toY, toW, toH); Point toCrossPoint = toRect.getCrossPoint(toLine); if (toCrossPoint != null) { this.x2 = toCrossPoint.getX(); this.y2 = toCrossPoint.getY(); } else { this.x2 = xx2; this.y2 = yy2; } } else { this.x1 = xx1; this.y1 = yy1; this.x2 = xx2; this.y2 = yy2; } } 谢谢你的共享精神 这个是把线的两端分别连在了图形的中心点了吧 我要的是线和图形边的交点 |
|
返回顶楼 | |
发表时间:2008-04-10
搜索下 Manhattan Router 算法不难的
|
|
返回顶楼 | |