这是怎么样的一个后续问题的问题,我问过here关于如何同时使用的SwingWorker使用的SwingWorker
在这种特定情况下画一个小程序/窗口动画递归三角算法,我使用的是由Guibas和stolfi提出的分而治之算法来计算一组点的Delaunay三角剖分,例如P.
该算法如下: 1.如果sizeof(p)== 2,则添加一条边;返回 2.如果sizeof(p)== 3,则添加一个逆时针方向的三角形;返回 3.如果sizeof(p)> 3, 将(p)分成左右两半。 三角测量个体半部 半部一起合并
我有一个三角测量类,其三角测量方法(如代码块示出)将执行分而治之算法(根据由Guibas和斯托尔菲提供的伪代码)
public QuadEdge[] partition(List<PlanarPoint> list) {
QuadEdge[] convexHullEdges = new QuadEdge[2];
if (list.size() == 2) {
//Add edge
} else if (list.size() == 3) {
//Add a counter-clockwise oriented triangle
} else if (list.size() > 3) {
List<PlanarPoint> leftHalf = new ArrayList<PlanarPoint>();
List<PlanarPoint> rightHalf = new ArrayList<PlanarPoint>();
//Divide the list of points into 2 halves
QuadEdge[] leftDelaunay = triangulate(leftHalf);
QuadEdge ldo = leftDelaunay[0];
QuadEdge ldi = leftDelaunay[1];
QuadEdge[] rightDelaunay = triangulate(rightHalf);
QuadEdge rdi = rightDelaunay[0];
QuadEdge rdo = rightDelaunay[1];
// Merge the two halves
merge(ldo,ldi,rdi,rdo);
}
return convexHullEdges;
}
我有一个DrawingPanel,它作为一个Canvas类并绘制三角形,绘制表面上的点。
我在我的主Triangulate类中使用SwingWorker来调用triangulate方法。
下面是对的SwingWorker代码:
private class GuibasStolfiWorker extends
SwingWorker<List<QuadEdge>, PlanarPoint> {
@Override
protected List<QuadEdge> doInBackground() throws Exception {
// retrieve the points added by the user on the drawing surface
List<PlanarPoint> list = drawingPanel.pointsList();
Trinagulation dt = new Triangulation(list);
dt.preprocess(); // removes duplicate points
dt.triangulate();// calls the recursive divide and conquer algorithm
return dt.edgeList(); //returns the list of edges which form the final triangulation.
}
protected void process(List<PlanarPoint> chunks) {
drawingPanel.repaint();
}
public void done() {
try {
List<QuadEdge> triangles = get();
drawingPanel.setTrianglesList(triangles);
drawingPanel.repaint();
} catch (InterruptedException e) {
} catch (ExecutionException e) {
}
}
};
现在,我想这个动画三角测量,通过显示递归调用三角测量,然后合并功能后出现的三角测量。
有没有人有一些指标,这将有助于我实施解决方案?
我曾考虑过在SwingWorker类中使用发布和处理方法,但后来发现这将是多余的,因为分而治之算法直接与最终的三角测量相提并论。
在此先感谢。
与您的问题无关,只需注意:不要访问doInBackground中的不同步ui属性(可能或不一定是您的情况:-) – kleopatra 2012-03-15 11:36:01
也许是盲目的,但是:看起来您并未调用发布在任何地方在doInBackground - 这意味着过程永远不会被称为... – kleopatra 2012-03-15 11:38:44
@kleopatra我试图调用发布,但它没有帮助。感谢非同步的访问提示。我会改变它。 – chaitanya 2012-03-15 14:59:18