class Stroke{ Vector points; Point center; Point start; Point end; int iDetail = 10; public Stroke(){ points = new Vector(); center = new Point(); start = new Point(); end = new Point(); } public void setStart(int x, int y){ start.x = x; start.y = y; } public void addPoint(int x, int y){ points.add(new Point(x-start.x, y-start.y)); end.x = x; end.y = y; } public void calcCenter(){ long px=0, py=0; for(int i = 0; i < points.size(); i++){ Point point = (Point)points.elementAt(i); px += point.x; py += point.y; } center.x = (int)( px / points.size()); center.y = (int)( py / points.size()); } public void draw(){ /* if(points.size() > 0){ Point start = (Point)points.elementAt(0); Point end = (Point)points.elementAt(points.size()-1); if( dist(start.x, start.y, end.x, end.y) < 20 ){ beginShape(POLYGON); } else { beginShape(LINE_STRIP); } */ //strokeWeight(2); //beginShape(LINE_STRIP); Point pold = null; for(int i = 0; i < points.size(); i++){ Point point = (Point)points.elementAt(i); // vertex(point.x, point.y); if(pold != null){ float distance = dist(pold.x, pold.y, point.x, point.y); //strokeWeight(1+distance); int alpha = (int)(255. * (float)(points.size()-i) / (float)points.size()) + (int)(20 - distance); // stroke(20, 20, 20);//, alpha);//255-distance*10 * (points); line(pold.x, pold.y, point.x, point.y); } pold = point; } //endShape(); } public void drawWithRecursion(Stroke srcStroke){ strokeWeight(2); if(points.size() > 0){ Point pold = (Point)points.elementAt(0); for(int i = 1; i < points.size(); i++){ Point point = (Point)points.elementAt(i); float distance = dist(pold.x, pold.y, point.x, point.y); float distanceG = dist(start.x, start.y, end.x, end.y); int degree = kakudo(float(point.x - pold.x), (float)(point.y - pold.y)); int degreeG = kakudo(float(end.x - start.x), (float)(end.y - start.y)); pushMatrix(); translate(pold.x, pold.y); rotate(radians(degree)); rotate(-radians(degreeG)); // ellipse(0, 0, 10,10); scale(distance/ distanceG); // line(0, 0, distanceG, 0); draw(); popMatrix(); pold = point; } } } public int kakudo(float x,float y) { float s; int deg; s=acos(x/sqrt(x*x+y*y)); s=(s/PI)*180.0; if (y<0) s=360-s; deg=(int)floor(s); if ((s-deg)>=0.5) deg++; return deg; } }