2009-09-17 12 views
5

मैं http://yuml.me यूएमएल चित्र का मैला-कुचैला कागज प्रभाव पसंद है, वहाँ है कि रूबी में अधिमानतः नहीं लेकिन PHP में के लिए एक एल्गोरिथ्म है, जावा या सी #, मैं देखना चाहते हैं, तो यह REBOL में एक ही बात करने के लिए आसान है:एल्गोरिदम यूएमएल आरेखों के लिए "स्क्रूफी" पेपर प्रभाव बनाने के लिए?

http://reboltutorial.com/blog/easy-yuml-dialect-for-mere-mortals2/

+0

अच्छा साइट/लिंक के लिए +1, काम :) – leppie

+0

अपनी परियोजनाओं का दौरा किया दिखता है: वाह मैं चकित हूँ। क्या आप अपने आईडीई में रीबोल शामिल करेंगे;) –

उत्तर

10

प्रभाव को जोड़ती है

  • एक विकर्ण ढाल
  • लाइनों जो, बल्कि सीधे होने से
  • भरने एक बूंद छाया, है उनमें से कुछ छोटे स्पष्ट रूप से यादृच्छिक विचलन, जो '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

+0

बहुत बहुत धन्यवाद आप एक genious हैं! –

संबंधित मुद्दे