protected static UVertexList deltaVectors3(UVertexList input) { UVertexList dl = new UVertexList(); boolean isClosed = input.isClosed(); for (int i = 0; i < input.size(); i++) { UVertex vv = null, vn = null, vp = null; vv = input.get(i); if (i > 0) vp = input.get(i - 1); if (i == 0 && isClosed) vp = input.last(); if (i < input.size() - 1) vn = input.get(i + 1); else if (isClosed) vn = input.first(); if (vn != null) vn = vn.copy().sub(vv); // .norm(); if (vp != null) vp = vv.copy().sub(vp); // .norm(); if (vp != null && vn != null) vv = vn.add(vp).mult(0.5f); else if (vn == null) vv = vp; else vv = vn; log( i + "/" + input.size() + " " + isClosed + " vp=" + (vp != null) + " vn=" + (vn != null) + " " + vv.str()); dl.add(vv); // if(i<input.size()-1) { // tmp=input.get(i+1).copy().sub(input.get(i)).norm(); // if(i>0) tmp.add( // input.get(i).copy().sub(input.get(i-1)).norm()).mult(0.5f); // } // else tmp=input.get(i).copy().sub(input.get(i-1)); // dl.add(tmp); } return dl; }
private void drawLines() { for (int i = 0; i < inter.size(); i++) { ii = inter.get(i); a = lines.get(i * 2); b = lines.get(i * 2 + 1); if (ii != null) { UMB.pnoFill().pstroke(p.color(255, 255, 0)).pline(a, ii); UMB.pstroke(p.color(255, 0, 128)).pline(b, ii); p.text(ii.str(), ii.x, 20); UMB.ppush().ptranslate(ii); p.box(10); p.box(1); UMB.ppop(); UMB.ppush().ptranslate(b); p.box(5); UMB.ppop(); } else UMB.pstroke(0xffff0000).pline(a, b); } }