21
จุดสุ่มบนทรงกลม
ความท้าทาย เขียนโปรแกรมหรือฟังก์ชั่นที่ไม่มีอินพุตและเอาต์พุตเวกเตอร์ที่มีความยาว111ในทิศทางสุ่มแบบตามหลักทฤษฏี นี่เทียบเท่ากับจุดสุ่มบนทรงกลมที่อธิบายโดยx2+ y2+ z2= 1x2+Y2+Z2=1x^2+y^2+z^2=1 ส่งผลให้เกิดการกระจายเช่นนี้ เอาท์พุต ทุ่นลอยสามอันจากการแจกแจงแบบสุ่มในทางทฤษฎีซึ่งสมการx2+y2+z2=1x2+y2+z2=1x^2+y^2+z^2=1มีค่าเป็นจริงถึงขีด จำกัด ที่แม่นยำ คำพูดที่ท้าทาย การกระจายแบบสุ่มจะต้องมีเครื่องแบบในทางทฤษฎี นั่นคือถ้าตัวสร้างตัวเลขสุ่มหลอกถูกแทนที่ด้วย RNG จริงจากตัวเลขจริงมันจะส่งผลให้มีการกระจายจุดสุ่มบนทรงกลมอย่างสม่ำเสมอ การสร้างตัวเลขสุ่มสามตัวจากการแจกแจงเครื่องแบบและการทำให้เป็นมาตรฐานนั้นไม่ถูกต้อง: จะมีอคติต่อมุมของพื้นที่สามมิติ ในทำนองเดียวกันการสร้างตัวเลขสุ่มสองตัวจากการแจกแจงเครื่องแบบและใช้พวกมันเป็นพิกัดทรงกลมนั้นไม่ถูกต้อง: จะมีอคติต่อขั้วของทรงกลม ความสม่ำเสมอที่เหมาะสมสามารถทำได้โดยอัลกอริทึมรวมถึง แต่ไม่ จำกัด เพียง: สร้างตัวเลขสุ่มสามตัวxxx , yyyและzzzจากการแจกแจงแบบปกติ (เกาส์เซียน) ประมาณ000และทำให้เป็นมาตรฐาน ตัวอย่างการนำไปปฏิบัติ สร้างสามตัวเลขสุ่มxxx , yyyและzzzจากเครื่องแบบกระจายอยู่ในช่วง(−1,1)(−1,1)(-1,1) ) คำนวณความยาวของเวคเตอร์โดยl=x2+y2+z2−−−−−−−−−−√l=x2+y2+z2l=\sqrt{x^2+y^2+z^2} 2 จากนั้นถ้าl>1l>1l>1ให้ปฏิเสธเวกเตอร์และสร้างชุดตัวเลขใหม่ มิฉะนั้นถ้าl≤1l≤1l \leq 1ให้เวกเตอร์เป็นปกติและกลับผลลัพธ์ ตัวอย่างการนำไปปฏิบัติ สร้างตัวเลขสุ่มสองตัวที่iiiและjjjจากการแจกแจงเครื่องแบบในช่วง(0,1)(0,1)(0,1)และแปลงให้เป็นพิกัดทรงกลมดังนี้: θϕ=2×π×i=cos−1(2×j−1)θ=2×π×iϕ=cos−1(2×j−1)\begin{align}\theta &= 2 \times \pi \times i\\\\\phi &= …