प्रभाव को जोड़ती है
- एक विकर्ण ढाल
- लाइनों जो, बल्कि सीधे होने से
- भरने एक बूंद छाया, है उनमें से कुछ छोटे स्पष्ट रूप से यादृच्छिक विचलन, जो 'scruffy' महसूस करता है।
आप इनपुट के हैश के साथ अपने यादृच्छिक संख्या जनरेटर को बीज कर सकते हैं ताकि आपको प्रत्येक बार एक ही छवि मिल सके।
यह लाइनें scruffing के लिए ठीक काम करने के लिए लगता है:
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
स्रोत
2009-09-17 08:12:58
अच्छा साइट/लिंक के लिए +1, काम :) – leppie
अपनी परियोजनाओं का दौरा किया दिखता है: वाह मैं चकित हूँ। क्या आप अपने आईडीई में रीबोल शामिल करेंगे;) –