आप इसे गोलाकार निर्देशांक में भी कर सकते हैं, जिस स्थिति में कोई अस्वीकृति नहीं है। पहले आप त्रिज्या और दो कोणों को यादृच्छिक रूप से उत्पन्न करते हैं, फिर आप , और ( , ,) को पुनर्प्राप्त करने के लिए संक्रमण सूत्र का उपयोग करते हैं , )।वाई जेड एक्स = आर पाप θ क्योंकि φ y = आर पाप θ पाप φ जेड = आर क्योंकि θxyzx=rsinθcosϕy=rsinθsinϕz=rcosθ
आप और बीच unifomly उत्पन्न करते हैं । त्रिज्या और झुकाव हालांकि एक समान नहीं हैं। संभावना है कि एक बिंदु त्रिज्या के गेंद के अंदर है है इसलिए की प्रायिकता घनत्व समारोह है । आप आसानी से जांच सकते हैं कि एक समान चर के क्यूबिक रूट का समान वितरण है, इसलिए यह है कि आप कैसे उत्पन्न कर सकते हैं । संभावना है कि एक गोलाकार शंकु के भीतर एक बिंदु झूठ झुकाव द्वारा परिभाषित है या अगरϕ02πrθrr3r3r2rθ(1−cosθ)/21−(1−cos(−θ))/2θ>π/2 । घनत्व तो है । आप जांच सकते हैं कि एक समान चर के आर्कोसिन का घनत्व उचित घनत्व है।θsin(θ)/2
या अधिक सरलता से, हम समान रूप से बेटन और के _ के कोसाइन का अनुकरण कर सकते हैं ।θ−11
R में यह नीचे दिखाया गया है।
n <- 10000 # For example n = 10,000.
phi <- runif(n, max=2*pi)
r <- runif(n)^(1/3)
cos_theta <- runif(n, min=-1, max=1)
x <- r * sqrt(1-cos_theta^2) * cos(phi)
y <- r * sqrt(1-cos_theta^2) * sin(phi)
z <- r * cos_theta
इस उत्तर को लिखने और संपादित करने के दौरान, मैंने महसूस किया कि समाधान मेरे विचार से कम तुच्छ है।
मुझे लगता है कि सबसे आसान और कम्प्यूटेशनल रूप से सबसे कुशल तरीका इस पोस्ट पर दिखाए गए यूनिट के क्षेत्र में @ उत्पन्न करने के लिए व्हिबर की विधि का पालन करना है और उन्हें साथ स्केल करना है ।(x,y,z)r
xyz <- matrix(rnorm(3*n), ncol=3)
lambda <- runif(n)^(1/3) / sqrt(rowSums(xyz^2))
xyz <- xyz*lambda