スキップしてメイン コンテンツに移動

球体で カシオペア座の5つの恒星 その3次元 宇宙内の相対位置を再現して




























import bpy
from random import randint

# 球体を作成する関数
def create_sphere(x, y, z, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)

# ランダムな座標を返す関数
def random_location():
    x = randint(-5, 5)
    y = randint(-5, 5)
    z = randint(-5, 5)
    return (x, y, z)

# 5つの球体を作成
for i in range(5):
    location = random_location()
    create_sphere(location[0], location[1], location[2], 1)





ランダムではなく、 カシオペア座の5つの恒星 その3次元 宇宙内の相対位置を再現して


カシオペア座の5つの恒星の相対位置を再現するためには、各恒星の座標を知る必要があります。これらの座標を手動で入力することもできますが、以下のように、座標データを使用することもできます。










import bpy

# カシオペア座の5つの恒星の座標
coordinates = [(4.23, 56.87, 13.04), 
               (3.19, 61.75, -0.28), 
               (1.62, 58.75, -18.45), 
               (0.11, 59.15, 16.52), 
               (1.83, 54.93, 10.96)]

# 球体を作成する関数
def create_sphere(x, y, z, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)

# 各恒星の座標に球体を作成
for coordinate in coordinates:
    create_sphere(coordinate[0], coordinate[1], coordinate[2], 1)








地球から見た カシオペア座の方向に回転させて

カシオペア座の方向に回転するためには、Blenderのシーン内のカメラを変更する必要があります。以下のスクリプトでは、カシオペア座の方向にカメラを向け、それをアクティブなカメラとして設定しています。




import bpy
import mathutils

# カシオペア座の5つの恒星の座標
coordinates = [(4.23, 56.87, 13.04), 
               (3.19, 61.75, -0.28), 
               (1.62, 58.75, -18.45), 
               (0.11, 59.15, 16.52), 
               (1.83, 54.93, 10.96)]

# 球体を作成する関数
def create_sphere(x, y, z, radius):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)

# カメラをカシオペア座の方向に向ける関数
def point_camera_to_cassiopeia(camera):
    # カメラの位置を定義
    camera_location = mathutils.Vector((0, 0, 0))
    # カシオペア座の重心座標を求める
    center = mathutils.Vector((sum([c[0] for c in coordinates])/5, 
                               sum([c[1] for c in coordinates])/5, 
                               sum([c[2] for c in coordinates])/5))
    # カメラの方向を設定
    camera_direction = (center - camera_location).normalized()
    # カメラの回転を設定
    camera.rotation_mode = 'QUATERNION'
    camera.rotation_quaternion = camera_direction.to_track_quat('-Z', 'Y')
    # カメラの位置を設定
    camera.location = camera_direction * -15

# カメラを作成
camera = bpy.data.cameras.new("Camera")
camera_obj = bpy.data.objects.new("Camera", camera)
bpy.context.scene.camera = camera_obj

# カメラをカシオペア座の方向に向ける
point_camera_to_cassiopeia(camera_obj)

# 各恒星の座標に球体を作成
for coordinate in coordinates:
    create_sphere(coordinate[0], coordinate[1], coordinate[2], 1)





以下は エラーなのか

地球や
恒星の大きさ指定が 

小さ過ぎたか
地球からのカシオペア座までの距離比で

恒星を球体1の大きさで描くを 最初に指定してたから




地球も描いて カシオペア座との相対距離を 恒星5つと比例させて 地球を10光年長さの半径大きさで描き 5つの恒星を5光年長さの半径で描いて



以下のスクリプトでは、前回のスクリプトに加えて、地球を描き、カシオペア座の5つの恒星との距離を比例させてそれぞれのオブジェクトを配置しています。地球は半径10光年の球体として作成され、カシオペア座の恒星は半径5光年の球体として作成されます。










import bpy
import mathutils

import math


# カシオペア座の5つの恒星の座標
coordinates = [(4.23, 56.87, 13.04), 
               (3.19, 61.75, -0.28), 
               (1.62, 58.75, -18.45), 
               (0.11, 59.15, 16.52), 
               (1.83, 54.93, 10.96)]

# 球体を作成する関数
def create_sphere(x, y, z, radius, name):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)
    sphere = bpy.context.object
    sphere.name = name

# カメラをカシオペア座の方向に向ける関数
def point_camera_to_cassiopeia(camera):
    # カメラの位置を定義
    camera_location = mathutils.Vector((0, 0, 0))
    # カシオペア座の重心座標を求める
    center = mathutils.Vector((sum([c[0] for c in coordinates])/5, 
                               sum([c[1] for c in coordinates])/5, 
                               sum([c[2] for c in coordinates])/5))
    # カメラの方向を設定
    camera_direction = (center - camera_location).normalized()
    # カメラの回転を設定
    camera.rotation_mode = 'QUATERNION'
    camera.rotation_quaternion = camera_direction.to_track_quat('-Z', 'Y')
    # カメラの位置を設定
    camera.location = camera_direction * -15

# カメラを作成
camera = bpy.data.cameras.new("Camera")
camera_obj = bpy.data.objects.new("Camera", camera)
bpy.context.scene.camera = camera_obj

# カメラをカシオペア座の方向に向ける
point_camera_to_cassiopeia(camera_obj)

# 各恒星の座標に球体を作成
for i, coordinate in enumerate(coordinates):
    name = "Star_" + str(i+1)
    distance = math.sqrt(sum([c**2 for c in coordinate])) # カシオペア座の恒星との距離
    scale = distance / 5 # カシオペア座の恒星との距離に比例してサイズを設定
    create_sphere(coordinate[0], coordinate[1], coordinate[2], scale, name)

# 地球を作成
earth_scale = 10 # 地球のサイズ
create_sphere(0, 0, 0, earth_scale, "Earth")









恒星の大きさを 半径 0.1 光年長さにして

恒星の大きさを半径 0.1 光年にするには、以下のように create_sphere 関数を呼び出す際に、2つ目の引数である半径の値を 0.1 に変更します。



球体内 球体の完成


import bpy
import math

# 球体を作成する関数
def create_sphere(x, y, z, radius, name):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)
    obj = bpy.context.active_object
    obj.name = name

# 恒星の座標を設定
star_coords = [(2.5, 4, 5), (1, -3, -4), (-3, 2, 1), (4, -3, 2), (-4, 4, -1)]

# 恒星を作成
for i, coord in enumerate(star_coords):
    x, y, z = coord
    create_sphere(x, y, z, 0.1, f"Star{i+1}")

# 地球を作成
earth_scale = 10 # 地球のサイズ
create_sphere(0, 0, 0, earth_scale, "Earth")

# カメラの位置と向きを設定
bpy.ops.object.camera_add(location=(0, -20, 0), rotation=(math.pi/2, 0, math.pi))

# ランダムな回転を加える
bpy.ops.transform.rotate(value=math.pi/4, orient_axis='X')
bpy.ops.transform.rotate(value=math.pi/4, orient_axis='Z')

# カメラの注視点を変更
bpy.context.scene.camera.data.type = 'ORTHO'
bpy.context.scene.camera.data.ortho_scale = 15
bpy.context.scene.camera.constraints.new(type='TRACK_TO')
bpy.context.scene.camera.constraints['Track To'].target = bpy.data.objects['Earth']

# 恒星と地球の距離を設定
star_distances = [5, 4, 7, 3, 8]
for i, distance in enumerate(star_distances):
    bpy.data.objects[f"Star{i+1}"].scale *= distance

bpy.data.objects['Earth'].scale *= 10

# ライトを作成
bpy.ops.object.light_add(type='SUN', location=(0, 0, 10))

# レンダリングの設定
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cycles.samples = 200
bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.filepath = "//blender_render.png"
bpy.ops.render.render(write_still=True)











import bpy
import math

# 球体を作成する関数
def create_sphere(x, y, z, radius, name):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)
    obj = bpy.context.active_object
    obj.name = name

# 恒星の座標を設定
star_coords = [(2.5, 4, 5), (1, -3, -4), (-3, 2, 1), (4, -3, 2), (-4, 4, -1)]

# 恒星を作成
for i, coord in enumerate(star_coords):
    x, y, z = coord
    create_sphere(x, y, z, 0.05, f"Star{i+1}")

# 地球を作成
earth_scale = 0.1 # 地球のサイズ
create_sphere(0, 0, 0, earth_scale, "Earth")

# カメラの位置と向きを設定
bpy.ops.object.camera_add(location=(0, -20, 0), rotation=(math.pi/2, 0, math.pi))

# ランダムな回転を加える
bpy.ops.transform.rotate(value=math.pi/4, orient_axis='X')
bpy.ops.transform.rotate(value=math.pi/4, orient_axis='Z')

# カメラの注視点を変更
bpy.context.scene.camera.data.type = 'ORTHO'
bpy.context.scene.camera.data.ortho_scale = 15
bpy.context.scene.camera.constraints.new(type='TRACK_TO')
bpy.context.scene.camera.constraints['Track To'].target = bpy.data.objects['Earth']

# 恒星と地球の距離を設定
star_distances = [5, 4, 7, 3, 8]
for i, distance in enumerate(star_distances):
    bpy.data.objects[f"Star{i+1}"].scale *= distance

bpy.data.objects['Earth'].scale *= 10

# ライトを作成
bpy.ops.object.light_add(type='SUN', location=(0, 0, 10))

# レンダリングの設定
bpy.context.scene.render.engine = 'CYCLES'
bpy.context.scene.cycles.samples = 200
bpy.context.scene.render.image_settings.file_format = 'PNG'
bpy.context.scene.render.filepath = "//blender_render.png"
bpy.ops.render.render(write_still=True)












地球の半径を 1光年に設定して 全文 書き直して

恒星の大きさを半径 0.1 光年に、地球の大きさを半径 1 光年に設定するためには、以下のように create_sphere 関数を呼び出す際に、4つ目の引数である半径の値を恒星の場合は 0.1、地球の場合は 1 に変更します。



また、恒星と地球の距離も、恒星の場合は 5 光年以下の値、地球の場合は 10 光年以下の値に設定する必要があります。

以下が、全体を書き直したスクリプトです。




エラー


import bpy
import math

# 球体を作成する関数
def create_sphere(x, y, z, radius, name):
    bpy.ops.mesh.primitive_uv_sphere_add(location=(x, y, z), radius=radius)
    obj = bpy.context.active_object
    obj.name = name

# 恒星の座標を設定
star_coords = [(2.5, 4, 5), (1, -3, -4), (-3, 2, 1), (4, -3, 2), (-4, 4, -1)]

# 恒星を作成
for i, coord in enumerate(star_coords):
    x, y, z = coord
    create_sphere(x, y, z, 0.1, f"Star{i+1}")

# 地球を作成
create_sphere(0, 0, 0, 1, "Earth")

# カメラの位置と向きを設定
bpy.ops.object.camera_add(location=(0, -20, 0), rotation=(math.pi/2, 0, math.pi))

# ランダムな回転を加える
bpy.ops.transform.rotate(value=math.pi/4, orient_axis='X')
bpy.ops.transform.rotate(value=math.pi/4, orient_axis='Z')





togetter.com/t/c2022meetzionad
togetter.com/t/b2022meetzionad




twitter 新着検索 Dürer & 測距儀


aaa
bbb




ccc twitter zionadchat
twitter に追い出されたら 連絡先は Gettr https://gettr.com/user/zionadchat
twitter サブアカウント https://twitter.com/2022zionad

old page いいい
new page いいい

目次 2022の目次 単純トリック hatena zionadchat
いいいいいいいい








このブログの人気の投稿

blenderzionad Googledrive 配布リンク 20230307 tue

3D Viewport 座標空間の色設定は 配布ファイルに入っていません 座標空間 色設定は ここで  blender 2023 初歩の初歩 006 長方体 cuboid に 3D Viewport 内で 色付け マテリアルわからなくて https://togetter.com/li/2088806 #Togetter 座標空間の色設定 保存は ここで blender 2023 初歩の初歩 007 3D Viewport 色設定保存 https://togetter.com/li/2097575 #Togetter あ 21個の球体を1単位毎に配置し、中央の球体を赤色に塗るPythonコード https://englishjazzionad.blogspot.com/2023/03/211python.html 配布リンク https://drive.google.com/file/d/1pJYEaFjAHNDuiRkCQ70zk5AIhxuG58EZ/view?usp=share_link 36個の球体 円周 https://englishjazzionad.blogspot.com/2023/03/blog-post_6.html 配布リンク https://drive.google.com/file/d/1IzkiO84ilwbzm4JuKuEuYPeR5oWxOIFW/view?usp=share_link 20230307 合体36個の球体 & 21個の球体  配布01 配布リンク https://drive.google.com/file/d/1UXP20HnTFKOcaSbXDrp6Rix-s6lZsBKu/view?usp=share_link ああああああああ あああああああああああああああ トーラス3つ と 立方体の 円柱空洞 2023 03 06 14h51 59 https://youtu.be/a6uxWUL0n7c   トーラス 3つ in 3次元空間 https://englishjazzionad.blogspot.com/2023/03/blog-post_5.html 配布リンク https://drive.google.com/file/d/1Pi6NDO1RHfI403BBm_OBPljUPGwcp526/v...

Blender 3.4.1で、長さ10、半径0.5の円柱をx軸に沿って作成し、中心軸を表示

Blender 3.4.1で、長さ10、半径0.5の円柱をx軸に沿って作成し、中心軸を表示する手順は次のとおりです。 Blenderを開き、3Dビューにあるオブジェクトを選択します。 「Shift + A」キーを押して、メニューを開き、メッシュ→円柱を選択します。 「F6」キーを押して、円柱のパラメーターメニューを開きます。 「半径」に0.5を入力し、「高さ」に10を入力します。 編集モードに移動します。 「Z」キーを押して、ワイヤーフレームを表示します。 選択した円柱を選択するために、マウスを使用して、円柱をクリックします。 「Shift + D」キーを押して、円柱のコピーを作成します。 「R」キーを押して、オブジェクトを回転します。 「X」キーを押して、X軸を選択します。 90度回転するために、「90」と入力します。 コピーした円柱が、x軸に沿って正しく配置されていることを確認します。 オブジェクトモードに戻るために、タブをクリックします。 中心軸を表示するために、円柱を選択して、プロパティペインにある「Object Data Properties」を開きます。 「Viewport Display」タブをクリックして、下部のメニューから「Axis」を選択します。 これで、長さ10、半径0.5の円柱がx軸に沿って作成され、中心軸が表示されます。 import bpy # 円柱を作成 bpy.ops.mesh.primitive_cylinder_add(radius=0.5, depth=10) # オブジェクトを選択 cylinder = bpy.context.active_object # 回転 cylinder.rotation_euler[1] = 1.5708  # 90度(ラジアン表記) cylinder.rotation_euler[0] = 0  # 0度(ラジアン表記) cylinder.rotation_euler[2] = 0  # 0度(ラジアン表記) # 中心軸を表示 cylinder.display_axis = True import bpy # 円柱を作成 bpy.ops.mesh.primitive_cylinder_add(radius=0.5, depth=10) # オブジェクトを選択 cy...