Змагання
Напишіть програму або функцію, яка не займає введення і виводить вектор довжиною у теоретично рівномірному випадковому напрямку.
Це еквівалентно випадковій точці на сфері, описаній
в результаті такого розподілу
Вихід
Три плавці з теоретично рівномірного випадкового розподілу, для якого рівняння справедливо для меж точності.
Зауваження виклику
- Випадковий розподіл повинен бути теоретично рівномірним . Тобто, якби генератор псевдовипадкових чисел був замінений справжнім RNG від реальних чисел, це призвело б до рівномірного випадкового розподілу точок по сфері.
- Генерування трьох випадкових чисел з рівномірного розподілу та їх нормалізація недійсні: з'явиться ухил у бік кутів тривимірного простору.
- Аналогічно, генерування двох випадкових чисел з рівномірного розподілу та використання їх як сферичних координат є недійсним: відбудеться ухил до полюсів сфери.
- Належної рівномірності можна досягти алгоритмами, включаючи, але не обмежуючись ними:
- Утворіть три випадкових числа , і з нормального (гауссового) розподілу навколо і нормалізуйте їх. 0
- Утворіть три випадкові числа , і з рівномірного розподілу в діапазоні . Обчисліть довжину вектора по . Тоді, якщо , відкиньте вектор і генеруйте новий набір чисел. В іншому випадку, якщо , нормалізуйте вектор і поверніть результат. ( - 1 , 1 ) l = √
- Згенеруйте два випадкових числа та з рівномірного розподілу в діапазоні та перетворіть їх у сферичні координати, наприклад: так що , і можна обчислити через( 0 , 1 ) θ
- Надайте у своїй відповіді короткий опис алгоритму, який ви використовуєте.
- Детальніше про підбір точок сфери читайте на MathWorld .
Вихідні приклади
[ 0.72422852 -0.58643067 0.36275628]
[-0.79158628 -0.17595886 0.58517488]
[-0.16428481 -0.90804027 0.38532243]
[ 0.61238768 0.75123833 -0.24621596]
[-0.81111161 -0.46269121 0.35779156]
Загальні зауваження
- Це код-гольф , тому відповідь, що використовує найменші байти в кожній мові, виграє.
- Застосовуються стандартні правила , правила вводу-виводу та правила лазівки .
- Будь-ласка, включіть Спроба онлайн-посилання або еквівалент, щоб продемонструвати працюючий код
- Будь ласка, мотивуйте свою відповідь поясненням вашого коду.
pi/6 ≈ 0.5236
отримати вихід. Це область сфери, вписана в куб одиничної площі