3D 매개변수 곡면
입체기하와 공간도형 / 3D 매개변수 곡면
6.5 3D 매개변수 곡면
다면체를 넘어 두 개의 매개변수 로 정의되는 공간 곡면을 그릴 때는 surface: 지시어를 사용합니다.
곡면 함수의 정의와 표면 렌더링
매개변수 함수는 와 를 입력받아 공간 좌표 튜플을 반환하는 익명 함수로 정의합니다.
도넛 모양의 토러스 곡면을 만드는 코드는 다음과 같습니다.
torus = (u, v) => ((3 + cos(v))*cos(u), (3 + cos(v))*sin(u), sin(v))
surface: torus, u in 0..2pi, v in 0..2pi, mesh=(32, 16), fill=#purple/30, stroke=0.4pt
u in 0..2pi와 v in 0..2pi는 두 매개변수의 회전 범위를 지정합니다.
mesh=(32, 16)은 곡면을 분할하는 와이어프레임 격자의 조밀도입니다. 앞의 숫자는 방향 분할 수, 뒤의 숫자는 방향 분할 수입니다. 수치가 클수록 곡면이 매끄러워집니다.
fill=#purple/30은 곡면 조각들의 표면 색상이며, stroke=0.4pt는 곡면 위에 그어지는 미세한 위선과 경선 와이어프레임의 선 굵기입니다.
안장 곡면(쌍곡포물면) 예제
다변수 미적분학에서 함수의 극값을 설명할 때 쓰이는 말안장 형태의 곡선입니다.
saddle = (u, v) => (u, v, u^2 - v^2)
surface: saddle, u in -1.5..1.5, v in -1.5..1.5, mesh=(20, 20), fill=#blue/20
복잡한 공간 3D 곡면도 매개변수 식만 세우면 숨은 면의 음영 처리가 반영된 깔끔한 도판으로 출력됩니다.
---
예제
수능 기하 과목에 단골 출제되는 문항으로, 정육면체의 인접한 세 면의 대각선을 연결하여 생기는 정삼각형 단면과 내부 보조선을 완벽한 겨냥도로 구현합니다.
@canvas: width=100mm, height=90mm, dpi=300
@3d: cam(elev=28deg, azim=35deg, dist=12, proj=oblique)
// 정육면체 생성
K = cube(size=4, center=(0, 0, 0))
// 단면을 형성할 세 꼭짓점을 지나는 평면 정의
// 육면체의 상단, 우측, 전면 모서리 삼분점을 지나는 절단 평면
P = plane(norm=(1, 1, 1), pt=(0.8, 0.8, 0.8))
// 단면 추출
sec = isect(K, P)
// 정육면체 렌더링 (숨은 모서리 자동 점선 처리)
draw: K, hide=dash, thick=1.2pt
// 단면 채우기 및 빗금 처리
fill: sec, fill=#red/15
shade: sec, hatch=(60deg, 1.8mm), stroke=0.6pt
poly: sec, stroke=1.5pt, color=#red
// 단면의 무게중심에 수선의 발 내리기
G = centroid(sec)
dot: G"G"(ne)
이 코드는 카메라의 각도에 맞춰 정육면체의 보이지 않는 3개 뒷모서리를 스스로 점선으로 전환하고, 공간상에서 기울어진 정삼각형 단면을 수학적으로 정확하게 절단하여 붉은색 빗금으로 마감합니다. 복잡한 삼수선의 정리와 정사영 문제를 한눈에 설명할 수 있는 교재용 도판이 완성됩니다.