レッスン 14:3次元で箱に屋根をつける

レッスン13では面をヨコにつなぎました。上ふたは「ヨコつなぎ」とは全く別個に作りました。
今回は、面をタテにつなぐ方法を説明します。

# python-3D-graphics-step-by-step-14.py    11/04/2023 by Kero
# (14) put a roof on the box in 3D

# Preparation 
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# graph area settings
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# make planes
# 各線分(リストのリスト)中に、点(1,1,5)を追加。3点結べば折れ線ができる。
x = np.array([[0, 0,1],[2, 2,1],[2, 2,1],[0, 0,1],[0, 0,1]])
y = np.array([[0, 0,1],[0, 0,1],[2, 2,1],[2, 2,1],[0, 0,1]])
z = np.array([[0, 2,5],[0, 2,5],[0, 2,5],[0, 2,5],[0, 2,5]])
walls = ax.plot_surface(x, y, z) # 折れ線同士を'surface'。

fig.savefig('python-3D-graphics-step-by-step-14.png')

# show figure
plt.show()

graph area setting までレッスン12と同じです。
make planes は、レッスン13と若干異なります。
完成図形のタテの稜線に着目します。屋根の天頂から4本降りています。それらの稜線は、頂点、4隅の柱の上端、及び柱の下端、の3点を結ぶ「折れ線」です。
レッスン12で、2点を結ぶ線分をセットにして、x, y, z の各値ごとに「リストのリスト」を形成していました。今度は、「3点をセットにして『リストのリスト』を作る」ことになります。15〜17行目で、「リストのリスト」に3点分のx,y,z の各値を入れています。例えば始めの折れ線は3点(0,0,0)〜(0,0,2)〜(1,1,5)を結ぶ線です。
ax.plot_surface で、折れ線間が成す面を作っています。折れ線同士の対をなす線分は同一平面上にあることが望ましいです。そうしないと、歪んだ不思議な面ができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です