2013-11-21 4 views
1

Я изучаю Java с сентября, но мне было поручено преподавать научный курс для создания программы на Python, которая будет генерировать случайный диаметр, используя максимальное и минимальное значение, и 15 случайные точки в этой сфере (x, y, z).Случайная генераторная функция в Python

Мне нужно создать генератор случайных чисел, который генерирует число от 0,0 до 1,0, поэтому я могу подключить его к моей формуле, чтобы найти случайный диаметр. Если случайное число равно RN, было бы: [(РН * (макс-мин)) + мин]

Сначала я использовал эту случайную функцию:

from random import* 
RN=random(): 

Проблема заключается в том, эта случайная функция [0.0, 1.0]. Другими словами, он не включает 1.0. Как создать функцию, которая включает в себя 1.0?

Кроме того, если вы не возражаете, можете ли вы помочь мне найти координаты y и z? Я знаю, как найти x.

Формула для значения y равна y = + или - sqrt (r^2-x^2) (для случайного генерирования тоже). Я бы получил значение x, которое является результатом случайной функции [0.0-1.0] и радиуса, который был бы половиной моего диаметра. Я полный новичок на Python, как мне инициализировать мои x и y и поставить приведенную выше формулу?

Формула для г аналогично, г = + или - SQRT (-x^2-у^2 + г^2) (чтобы быть случайным образом, а)

Они используют формулы для круг: радиус: г = SQRT (х^2 + у^2) сфера: г = SQRT (х^2 + у^2 + г^2)

Я был бы невероятно благодарен, если вы можете ответить на любой часть моего вопроса, большое спасибо за то, что нашли время, чтобы прочитать это! ** между прочим, я usinHi! Я изучаю Java с сентября, но мне было поручено преподавать научный курс для создания программы на Python, которая будет генерировать случайный диаметр с использованием максимального и минимального значения и 15 случайных точек в этой сфере (x, y, z).

Мне нужно создать генератор случайных чисел, который генерирует число от 0,0 до 1,0, поэтому я могу подключить его к моей формуле, чтобы найти случайный диаметр. Если случайное число равно RN, было бы: [(РН * (макс-мин)) + мин]

Сначала я использовал эту случайную функцию:

от случайного импорта * RN = случайная() :

Проблема в том, что эта случайная функция [0.0, 1.0]. Другими словами, он не включает 1.0. Как создать функцию, которая включает в себя 1.0?

Кроме того, если вы не возражаете, можете ли вы помочь мне найти координаты y и z? Я знаю, как найти x.

Формула для значения y равна y = + или - sqrt (r^2-x^2) (для случайного генерирования тоже). Я бы получил значение x, которое является результатом случайной функции [0.0-1.0] и радиуса, который был бы половиной моего диаметра. Я полный новичок на Python, как мне инициализировать мои x и y и поставить приведенную выше формулу?

Формула для г аналогично, г = + или - SQRT (-x^2-у^2 + г^2) (чтобы быть случайным образом, а)

Они используют формулы для круг: радиус: г = SQRT (х^2 + у^2) сфера: г = SQRT (х^2 + у^2 + г^2)

Я был бы невероятно благодарен, если вы можете ответить на любой часть моего вопроса, большое вам спасибо за то, что нашли время, чтобы прочитать это!

** Кстати, я использую python x, y spyder!

ответ

0

В ответ на генератор случайных чисел:

RN = random.uniform(a, b) 

возвращают случайное число N таким образом, что < = N < = Ь.

Как инициировать x и y, y будет инициализироваться, когда вы задаете y = что-то, оно делает это автоматически.

2

random.uniform предоставит вам равномерно распределенное случайное число между заданным минимумом и максимумом.

Просто создайте случайные точки и проверьте, находятся ли они в сфере. Если это не так, отбросьте их и повторите попытку.

import math 
import random 

def generate_points(n_points, min_diameter=0, max_diameter=1): 
    diameter = random.uniform(min_diameter, max_diameter) 
    radius = diameter/2 
    count = 0 
    while count < n_points: 
     x, y, z = [random.uniform(-radius, radius) for _ in range(3)] 
     distance = math.sqrt(x * x + y * y + z * z) 
     if distance <= radius: 
      yield (x, y, z) 
      count += 1 

for x, y, z in generate_points(10): 
    print x, y, z 

Примечание: это может привести к искажению точек. (Я не уверен, на самом деле это нормально). Другой подход может заключаться в использовании полярных координат, выборе двух случайных углов и случайного радиуса (смещение от центра).

Вот математика для такого подхода:

theta = random.uniform(0, 2 * math.pi) 
phi = random.uniform(-math.pi/2, math.pi/2) 
x = r * cos(theta) * cos(phi) 
y = r * sin(phi) 
z = r * sin(theta) * cos(phi) 

Смотрите здесь для получения дополнительной информации распределения:

https://math.stackexchange.com/questions/87230/picking-random-points-in-the-volume-of-sphere-with-uniform-probability

http://mathworld.wolfram.com/SpherePointPicking.html (это один составляет около точек на поверхности сферы, так может оказаться нецелесообразным)

0

Вы можете использовать random.range

random.randrange(-15,15,.1) 

Это найдет число между -15 и 15, которое делится на 0,1.

+1

'random.randrange' может только имеют целые аргументы. Лучший способ сделать это (на мой взгляд) - «random.randrange (-150, 150, 1)/10'. –

1

Я использовал это для генератора случайных чисел, и он работает, я не уверен, если это правильный один, что вы ищете, но я надеюсь, что это помогает

import random 

maths_operator_list=['+','-','*'] 
maths_operator = random.choice(maths_operator_list) 
number_one = random.randint(0,20) 
number_two = random.randint(0,20) 
correct_answer = 0 

print(str(number_one), str(maths_operator), number_two) 

if maths_operator == '+': 
    correct_answer = number_one + number_two 
elif maths_operator == '-': 
    correct_answer = number_one - number_two 
elif maths_operator == '*': 
    correct_answer = number_one * number_two 

print(correct_answer)