public double accumulateAreas(
double xp, double yp,
TriMesh mesh, TriMesh.NodeList nodeList, TriMesh.TriList triList)
{
clear();
int ntri = triList.ntri();
TriMesh.Tri[] tris = triList.tris();
for (int itri=0; itri<ntri; ++itri) {
TriMesh.Tri tri = tris[itri];
TriMesh.Node na = tri.nodeA();
TriMesh.Node nb = tri.nodeB();
TriMesh.Node nc = tri.nodeC();
double xa = na.xp(), ya = na.yp();
double xb = nb.xp(), yb = nb.yp();
double xc = nc.xp(), yc = nc.yp();
Geometry.centerCircle(xp,yp,xb,yb,xc,yc,_ca);
Geometry.centerCircle(xp,yp,xc,yc,xa,ya,_cb);
Geometry.centerCircle(xp,yp,xa,ya,xb,yb,_cc);
Geometry.centerCircle(xa,ya,xb,yb,xc,yc,_ct);
double aa = area(_cb,_cc,_ct);
double ab = area(_cc,_ca,_ct);
double ac = area(_ca,_cb,_ct);
accumulate(na,aa);
accumulate(nb,ab);
accumulate(nc,ac);
}
return sum();
}
private double[] _ca = new double[2];