2023年4月25日火曜日

20230426aaa 球体表面に 36個の球体  





# ランダム配置 球体表面に36個 球体



import bpy

import math

import random


# 大きい球体の情報

zion_big_sphere_name = "Center Sphere"  # 大きい球体の名前

zion_big_sphere_radius = 2.0  # 大きい球体の半径

zion_big_sphere_location = (0, 0, 0)  # 大きい球体の位置

zion_big_sphere_rotation_speed = 600  # 1回転するのに要するフレーム数

zion_big_sphere_rotation_direction = 1  # 回転方向(1: 反時計回り、-1: 時計回り)


# 小さい球体の情報

zion_small_sphere_name = "Small Sphere"  # 小さい球体の名前

zion_small_sphere_count = 36  # 小さい球体の数

zion_small_sphere_radius = 0.1  # 小さい球体の半径


# 大きい球体を作成

bpy.ops.mesh.primitive_uv_sphere_add(radius=zion_big_sphere_radius, location=zion_big_sphere_location)


# 大きい球体を変数に格納

zion_big_sphere = bpy.context.object

zion_big_sphere.name = zion_big_sphere_name


# 小さい球体を作成

for i in range(zion_small_sphere_count):

    # 球面座標を計算

    theta = random.uniform(0, 2 * math.pi)

    phi = random.uniform(0, math.pi)

    x = zion_big_sphere_radius * math.sin(phi) * math.cos(theta)

    y = zion_big_sphere_radius * math.sin(phi) * math.sin(theta)

    z = zion_big_sphere_radius * math.cos(phi)

    location = (x, y, z)


    # 小さい球体を作成

    bpy.ops.mesh.primitive_uv_sphere_add(radius=zion_small_sphere_radius, location=location)


    # 小さい球体を大きい球体の子オブジェクトにする

    zion_small_sphere = bpy.context.object

    zion_small_sphere.name = zion_small_sphere_name + "." + str(i)

    zion_small_sphere.parent = zion_big_sphere


# アニメーションを作成

frame_count = zion_big_sphere_rotation_speed

for i in range(frame_count):

    # 大きい球体を回転させる

    zion_big_sphere.rotation_euler.rotate_axis("Z", zion_big_sphere_rotation_direction * 2 * math.pi / frame_count)


    # 小さい球体を大きい球体の表面に沿って移動させる

    for j in range(zion_small_sphere_count):

        small_sphere_name = zion_small_sphere_name + "." + str(j)

        small_sphere = bpy.data.objects[small_sphere_name]

        sphere_phi = math.acos(small_sphere.location[2] / zion_big_sphere_radius)

        sphere_theta = math.atan2(small_sphere.location[1], small_sphere.location[0]) + zion









import bpy

from math import radians


# 定義:数値調整

zion_radius = 2.0

zion_center_sphere = (0, 0, 0)

zion_kaiten_frame = 300

zion_name = "表面回転球体"


# 球体を作成

bpy.ops.mesh.primitive_uv_sphere_add(radius=zion_radius, location=zion_center_sphere)


# オブジェクト名を変更

bpy.context.object.name = zion_name


# 回転アニメーションを設定

bpy.context.scene.frame_end = zion_kaiten_frame


rotation_degrees = 360.0 / zion_kaiten_frame


for i in range(zion_kaiten_frame):

    bpy.context.scene.frame_set(i)

    bpy.context.object.rotation_euler[2] = radians(rotation_degrees * i)

    bpy.ops.anim.keyframe_insert(type='Rotation')


この球体表面を中心にする

半径 0.1  の球体を 36 個 ランダムに配置する


このボールの作成個数を調整できるように

zion_small_ball_number =36


オブジェクト名は 

zion_small_ball_name = "small_ball_01"

から small_ball_ の連番にする 


定義 数字調整は

スクリプトの先頭に書き出す



small_ball_01

small_ball_02

この2つは RGBT で 赤色

残りの色は 青色 ちょっと白が入ってる色にする








球体を作成


球体半径 zion_radius = 2.0

球体 中心位置 zion_center_spher = (0,0,0)

球体を回転させる

frame 600 で 1回転

zion_kaiten_frame =300