2012-05-24 21 views
7

मैं 3 डी पर्लिन शोर एल्गोरिदम को कम आयामों में अनुकूलित करने के लिए देख रहा हूं, लेकिन मुझे ढाल समारोह के साथ परेशानी हो रही है, क्योंकि मैं तर्क को पूरी तरह से समझ नहीं पा रहा हूं।पर्लिन शोर ग्रेडियेंट फ़ंक्शन

मूल पर्लिन ढाल समारोह में चार तर्क होते हैं: hash और एक त्रि-आयामी समन्वय (x, y, z)। फ़ंक्शन का परिणाम नीचे सूचीबद्ध अनुसार hash mod 16 के मान के आधार पर वापस किया जाता है।

  • 0: x + y
  • 1: -x + y
  • 2: x - y
  • 3: -x - y
  • 4: x + z
  • 5: -x + z
  • 6: x - z
  • 7: -x - z
  • 8: y + z
  • 9: -y + z
  • 10: y - z
  • 11: -y - z
  • 12: y + x
  • 13: -y + z
  • 14: y - x
  • 15: के बाद से हर संयोजन एक बार प्रतिनिधित्व किया है -y - z

0 से 11 के लिए वापसी मान, पैटर्न का एक प्रकार हैं। अंतिम चार, हालांकि, डुप्लिकेट हैं। पिछले चार रिटर्न मूल्यों को फिट करने के लिए उन्हें क्यों चुना गया था? और दो (x, y) और एक (x) आयामों के साथ समान मामले क्या होंगे?

उत्तर

9

... देर से उत्तर किसी से भी बेहतर नहीं है? ;-)

grad "बेहतर शोर" कार्यान्वयन में कार्य वेक्टर एक्स, वाई, जेड और एक छद्म यादृच्छिक ढाल वेक्टर के बीच एक डॉट उत्पाद की गणना करता है।

इस कार्यान्वयन में, ढाल वेक्टर 12 विकल्पों में से चुना गया है। वे चयन की एकरूपता ड्रॉप और नंबर 12 और 14 जोड़ने के लिए, क्योंकि यह तेजी से होता है की तुलना में hash % 12

hash & 15 करने के लिए एक 2 डी पर्लिन शोर के लिए मैं इस तरह किसी भी दिखाई समस्याओं के बिना केवल 4 ढाल वैक्टर का इस्तेमाल किया है:

return ((hash & 1) ? x : -x) + ((hash & 2) ? y : -y); 
+1

उत्तर के लिए धन्यवाद! मैं उन नायकों के लिए हमेशा अविश्वसनीय रूप से आभारी हूं जो पुराने भूल गए प्रश्नों को बचाने के लिए झुकाव करते हैं। –