|
精华帖 (0) :: 良好帖 (10) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2008-04-10
如何实现两方形间连线的算法,使得线的两端正好是与方形各边的交点。
在方形变换位置的时候交点也可以跟着变化 条件:方形的长、宽、坐标、中心点都是已知的 如图: 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2008-04-10
html画线?
|
|
| 返回顶楼 | |
|
时间:2008-04-10
这里似乎没有讨论图形学的。
http://xyz20003.javaeye.com/blog/149102 我自己做了一个连线的,写得不好,参考参考 |
|
| 返回顶楼 | |
|
时间:2008-04-10
xyz20003 写道 这里似乎没有讨论图形学的。 http://xyz20003.javaeye.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 算法不难的
|
|
| 返回顶楼 | |





