El efecto combina
- un gradiente diagonal llenar
- una gota de sombra
- líneas que, en lugar de ser recta, tener algunas pequeñas desviaciones aparentemente aleatorias en ellos, lo que le da una sensación "desaliñada".
Puede inicializar su generador de números aleatorios con un hash de la entrada para obtener la misma imagen cada vez.
Esto parece funcionar bien para scruffing líneas:
public class ScruffyLines {
static final double WOBBLE_SIZE = 0.5;
static final double WOBBLE_INTERVAL = 16.0;
Random random;
ScruffyLines (long seed) {
random = new Random(seed);
}
public Point2D.Double[] scruffUpPolygon (Point2D.Double[] polygon) {
ArrayList<Point2D.Double> points = new ArrayList<Point2D.Double>();
Point2D.Double prev = polygon[0];
points.add (prev); // no wobble on first point
for (int index = 1; index < polygon.length; ++index) {
final Point2D.Double point = polygon[index];
final double dist = prev.distance (point);
// interpolate between prev and current point if they are more
// than a certain distance apart, adding in extra points to make
// longer lines wobbly
if (dist > WOBBLE_INTERVAL) {
int stepCount = (int) Math.floor (dist/WOBBLE_INTERVAL);
double step = dist/stepCount;
double x = prev.x;
double y = prev.y;
double dx = (point.x - prev.x)/stepCount;
double dy = (point.y - prev.y)/stepCount;
for (int count = 1; count < stepCount; ++count) {
x += dx;
y += dy;
points.add (perturb (x, y));
}
}
points.add (perturb (point.x, point.y));
prev = point;
}
return points.toArray (new Point2D.Double[ points.size() ]);
}
Point2D.Double perturb (double x, double y) {
return new Point2D.Double (
x + random.nextGaussian() * WOBBLE_SIZE,
y + random.nextGaussian() * WOBBLE_SIZE);
}
}
example scruffed up rectangle http://img34.imageshack.us/img34/4743/screenshotgh.png
+1 para el buen sitio/enlace, parece facil :) Visitado – leppie
sus proyectos: wow estoy sorprendido. ¿Incluirías Rebol en tu IDE;) –