두 시트의 쌍곡면 탐색: 3D 형상을 통한 여정
May 06 2023
소개 기하학은 우리 주변의 세계를 이해하는 데 중요한 역할을 합니다. 다양한 모양과 구조를 설명, 분석 및 시각화하는 도구를 제공합니다.
소개
기하학은 우리 주변의 세계를 이해하는 데 중요한 역할을 합니다. 다양한 모양과 구조를 설명, 분석 및 시각화하는 도구를 제공합니다. 3차원 기하학에서 흥미로운 모양 중 하나는 두 시트의 쌍곡면입니다. 이 문서에서는 두 시트의 쌍곡면 개념, 수학적 표현, 속성 및 실제 응용 프로그램을 살펴봅니다.
쌍곡면 이해
쌍곡면은 주축 중 하나를 중심으로 쌍곡선을 회전시켜 형성된 3차원 곡면입니다. 쌍곡면에는 한 장의 쌍곡면과 두 장의 쌍곡면의 두 가지 유형이 있습니다. 이 두 유형의 주요 차이점은 구조와 수학적으로 정의되는 방식에 있습니다.
두 장의 쌍곡면
두 시트의 쌍곡면은 모든 방향으로 무한히 확장되는 두 개의 분리된 거울상 시트로 형성된 표면입니다. 두 시트의 쌍곡면의 수학적 표현은 다음 방정식으로 제공됩니다.
(1)[math] \frac{x^2}{a^2} + \frac{y^2}{b^2} - \frac{z^2}{c^2} = -1 [/math]
여기서 , a
, b
는 c
쌍곡면의 모양을 결정하는 양의 상수로 (x, y, z)
표면 위의 한 점의 좌표를 나타낸다.
두 시트의 쌍곡면 속성
- 점근 원뿔: 두 시트의 쌍곡면에는 xy 평면 위와 아래에 각각 하나씩 두 개의 점근 원뿔이 있습니다. 이 원뿔은 동일한 꼭지점을 공유하며 서로의 거울 이미지입니다. 점근적 원뿔은 무한 거리에서 쌍곡면에 '접촉'하는 원뿔이며, 이는 쌍곡면의 표면이 무한대로 확장됨에 따라 원뿔에 점점 더 가까워진다는 것을 의미합니다.
- 연결되지 않은 표면: 한 시트의 쌍곡면과 달리 두 시트의 쌍곡면은 두 개의 분리된 연결되지 않은 표면으로 구성됩니다. 이 속성은 모양에 고유한 모양을 부여하고 다른 3D 기하학적 모양과 구별됩니다.
- 자기 교차: 두 시트의 쌍곡면은 자기 교차하지 않습니다. 즉, 어느 지점에서도 교차하지 않습니다.
- 대칭: 두 시트의 쌍곡면은 xy 평면에 대해 좌우 대칭을 나타냅니다. 이것은 xy 평면을 통해 쌍곡면을 자르면 두 개의 동일한 반쪽을 얻을 수 있음을 의미합니다.
두 시트의 쌍곡면은 추상적인 수학적 개념이지만 다양한 실제 응용 프로그램에 영감을 주었습니다.
- 아키텍처: 쌍곡면 모양은 발전소용 냉각탑 건설에 사용되었습니다. 쌍곡면의 곡선 형태는 구조적 안정성과 효율적인 공기 순환을 제공하여 냉각 과정에 도움을 줍니다.
- 위성 접시: 쌍곡면은 일부 위성 접시 디자인에서 찾을 수 있습니다. 이 요리는 한 방향의 포물선 단면과 다른 방향의 쌍곡선 단면을 가지므로 들어오는 신호에 효율적으로 초점을 맞출 수 있습니다.
import bpy
import bmesh
import numpy as np
# Define the range for x, y values
x_range = (-3, 3)
y_range = (-3, 3)
step = 0.1
# Create a new mesh object
mesh = bpy.data.meshes.new(name="TwoSheetHyperboloid")
# Create a new object with the mesh
obj = bpy.data.objects.new("TwoSheetHyperboloid", mesh)
# Link the object to the scene collection
bpy.context.collection.objects.link(obj)
# Create a new bmesh
bm = bmesh.new()
# Create a meshgrid for x and y values
x = np.arange(x_range[0], x_range[1], step)
y = np.arange(y_range[0], y_range[1], step)
X, Y = np.meshgrid(x, y)
# Calculate the values for the two-sheet hyperboloid
Z1 = np.sqrt(X**2 + Y**2 + 1)
Z2 = -np.sqrt(X**2 + Y**2 + 1)
# Create the vertices
verts = [bm.verts.new((X[i, j], Y[i, j], Z1[i, j])) for i in range(len(x)) for j in range(len(y))] + \
[bm.verts.new((X[i, j], Y[i, j], Z2[i, j])) for i in range(len(x)) for j in range(len(y))]
# Create the faces
for k in range(2):
for i in range(len(x) - 1):
for j in range(len(y) - 1):
offset = k * len(x) * len(y)
v1 = offset + i * len(y) + j
v2 = offset + i * len(y) + j + 1
v3 = offset + (i + 1) * len(y) + j + 1
v4 = offset + (i + 1) * len(y) + j
bm.faces.new((verts[v1], verts[v2], verts[v3], verts[v4]))
# Update the bmesh
bm.normal_update()
# Set the mesh of the bmesh object
bm.to_mesh(mesh)
# Set the object's viewport display mode to Wire
obj.display_type = 'WIRE'