Мне нужна помощь в формировании круга с кубиками, используя блендер 2.69 с движком Python

Пожалуйста, прости меня, но я действительно знаю, как немного кодировать на VB, а Python - это не то, к чему я привык. Я действительно пытался увидеть, разработали ли другие люди и / или показали алгоритм, который я пытаюсь выполнить.

У меня в голове дизайн визуализатора, и я пытаюсь сделать так, чтобы несколько кубов (переменный ввод на данный момент) были расположены на определенном расстоянии (возможно, 5-10 единиц блендера) от центра сцены и угла грани, так что будет одна грань, указывающая на центр, и одна грань, указывающая противоположное направление. Я пытаюсь начать с 10 кубов, потому что я чувствую, что это будет справедливое число, которое, как мы надеемся, покажет форму круга.

Я сделал изображение, чтобы помочь описать то, что я пытаюсь сделать:

Все, что мне удалось выяснить до сих пор, - это то, что мне нужно добавить куб с определенным вращением, и это вращение нужно пошагово для каждого куба. поэтому нужно небольшое уравнение, что-то вроде этого.

    (10)           (36)
360 / numberOfCubes = steppedAngle

Это все, что мне удалось выяснить, потому что я не знаю, как программировать на Python для этого.

Любая помощь будет принята с благодарностью и будет зачтена в финальной версии.

Обновление: 1

Благодаря помощи из ответа ниже, я наконец-то заставил его работать так, как я хотел. http://vvcap.net/db/bKKUz3Uw4WUqL_WVDU0j.png

и вот код, написанный в справке из ответа ниже. 'импорт bpy импорт математика

##num of cubes
n = 10

##distange from center
radius = 7

for i in range(1, n + 1):
    angle = (i - 1) * math.pi * 2 / n
    xcoord=(radius * math.cos(angle))
    ycoord=(radius * math.sin(angle))
    bpy.ops.mesh.primitive_cube_add(location=(xcoord,ycoord,0),rotation=(0,0,angle))

'

1 ответ

Решение

Давайте начнем с кубов в кругу, и мы будем работать оттуда.

У вас есть N кубов, и вы хотите поместить их в круг радиуса R вокруг центра вселенной (0,0,0).

Применение базовой тригонометрии: каждый куб находится на одном из радиусов круга, когда вы делите круг на N. Следовательно, ваш первый куб находится на 0 рад, ваш второй куб на 2* пи /N рад, ваш третий куб в 2 * 360/N рад,... ваш куб N находится в (N-1) * 2* пи /N рад. Теперь у нас есть формула: Расположение куба в круге = (i - 1) * 2*pi/N в радианах, для каждого i от 1 до N. Теперь местоположение в пространственных координатах равно (r*cos(angle)), r*sin(угол), 0) для круга, который расположен на плоскости XY, а его центр включен (0,0,0).

Мой Blender Python очень ржавый, поэтому я не предоставлю вам полного решения, но так и должно быть:

import math

for i in range(1, N + 1):
    angle = (i - 1) * math.pi * 2 / N
    x_coord = radius * math.cos(angle)
    y_coord = radius * math.sin(angle)
    z_coord = 0
    cube = place_cube(x_coord, y_coord, z_coord)

Это поместит кубики в правильные координаты, но не повернет их в правильном направлении. К счастью, вы можете повернуть каждый куб на угол и получить правильную ориентацию. Так что вы можете сделать:

import math

for i in range(1, N + 1):
    angle = (i - 1) * math.pi * 2 / N
    x_coord = radius * math.cos(angle)
    y_coord = radius * math.sin(angle)
    z_coord = 0
    cube = place_cube(x_coord, y_coord, z_coord)
    cube.rotate_around_z(angle)

Я не предоставил функции place_cube и rotate_around_z, потому что я почти не помню API-интерфейс Blender Python, но он не должен быть слишком сложным.

Другие вопросы по тегам