2012-05-15 18 views
6

मैं क्लोजर में छवि संश्लेषण के लिए एक छोटी लाइब्रेरी/डीएसएल बनाने के साथ प्रयोग कर रहा हूं। मूल रूप से विचार पुस्तकालय के उपयोगकर्ताओं को प्रक्रियात्मक रूप से दिलचस्प छवियों को बनाने के लिए गणितीय कार्यों के सेट लिखने की अनुमति देना है।डीएसएल

फ़ंक्शंस को डबल मानों पर काम करने की आवश्यकता है, और एक स्थान वेक्टर को रंग मान में बदलने का रूप लेना है, उदा। (एक्स, वाई, जेड) -> (आर, जी, बी, ए)

हालांकि मैं कुछ दिलचस्प डिजाइन फैसले का सामना करना पड़ रहा हूँ:

  • इनपुट 1,2,3 या शायद हो सकता था 4 आयाम (एक्स, वाई, जेड प्लस टाइम)
  • वेक्टर गणित संचालन (डॉट उत्पाद, जोड़, गुणा इत्यादि) प्रदान करना अच्छा होगा
  • घूर्णन, पैमाने जैसे संचालन के साथ कार्यों को लिखना मूल्यवान होगा आदि
  • प्रदर्शन कारणों से, पूरे में आदिम डबल गणित का उपयोग करना महत्वपूर्ण है (यानी बॉक्सिंग डी बनाने से बचें विशेष रूप से oubles)। तो एक समारोह जिसे लाल, हरे और नीले रंग के घटकों को वापस करने की आवश्यकता होती है, शायद तीन अलग-अलग फ़ंक्शन बनने की आवश्यकता होती है जो क्रमशः प्राचीन लाल, हरे और नीले मानों को वापस कर देती हैं।

क्लोजर (1.4 बीटा) में इस प्रकार का डीएसएल उचित रूप से कैसे प्राप्त किया जा सकता है इस पर कोई विचार?

+0

GitHub पर इसके बारे में किसी भी जल्दी मसौदा टुकड़े मिल गया एक बनावट आप कर सकते हैं पैमाने के लिए? – rplevy

+0

https://github.com/mikera/clisk – mikera

+0

क्या आप पैन से अवगत हैं (और मेरा पैनिटिटो, जो एक शुद्ध-हैकेल प्रति था)। वह एक हैकेल आधारित पुस्तकालय था जिसने यह किया था। आप शायद कुछ जानकारी गूगल कर सकते हैं। यह आपको कुछ विचार दे सकता है। [...] http: // conal।नेट/पैन/(यदि आप कुछ सुंदर उत्पन्न करने की उम्मीद कर रहे हैं, तो निराश न हों - मैं अभी भी आश्चर्यचकित हूं कि कैसे इस तरह की शक्तिशाली लाइब्रेरी से ऐसी बदसूरत छवियां उत्पन्न करने में कामयाब रहा)। ps pancito भी http://www.acooke.org/pancito-code/ –

उत्तर

0

ठीक है, इसलिए मुझे अंततः ऐसा करने का एक अच्छा तरीका पता चला।

चाल (कोड का एक वेक्टर के रूप में कार्य का प्रतिनिधित्व करने के "कोड है डेटा" अर्थ में, जैसे

[(Math/sin (* 10 x)) 
(Math/cos (* 12 y)) 
(Math/cos (+ (* 5 x) (* 8 y)))] 

यह तो "संकलित" किया जा सकता है 3 वस्तुओं के साथ एक जावा इंटरफ़ेस को लागू करना था निम्न विधि:।

:

public double calc(double x, double y, double z, double t) { 
    ..... 
} 

और ये समारोह वस्तुओं लाल, हरे और प्रत्येक पिक्सेल के लिए नीले रंग मूल्यों को प्राप्त करने के लिए आदिम मूल्यों के साथ कहा जा सकता है परिणाम की तरह कुछ कर रहे हैं 0

enter image description here

अंत में, एक साधारण डीएसएल का उपयोग करके कार्यों को लिखना संभव है, उदा।

(vscale 10 some-function-vector) 

मुझे कोई दिलचस्पी किसी के लिए GitHub पर सभी कोड प्रकाशित किया है::

https://github.com/mikera/clisk

+1

आप इसे पीट "स्रोत" कोड उत्पन्न कर सकते हैं और इसे एक जनरेटिव क्रॉस-कंपाइलर का उपयोग कर सकते हैं;) –

1

भयानक छवि मैगिक टूल http://www.imagemagick.org पर एक नज़र आपको इस बारे में एक विचार दे सकता है कि इस तरह की लाइब्रेरी से किस तरह के संचालन की उम्मीद की जाएगी।

शायद आप देखेंगे कि यदि आप डिफ़ॉल्ट आईएम टूलसेट को दोहराना चाहते हैं तो आपको वेक्टर गणित में ड्रॉप करने की आवश्यकता नहीं होगी।

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