고급 곡선 표현
해석학 / 고급 곡선 표현
4.4 고급 곡선 표현
함수식 의 꼴로 정리되지 않는 복잡한 기하 궤적과 음함수 곡선을 그리는 문법입니다.
매개변수 곡선
가로 좌표 와 세로 좌표 가 매개변수 에 의해 각각 정의되는 곡선은 param() 함수를 사용합니다.
draw: param(x = 2*cos(t), y = 3*sin(t)), t in 0..2pi, thick=1.5pt
타원, 사이클로이드, 하이포사이클로이드처럼 시간에 따른 위치 변화를 다루는 기하학 곡선을 그릴 때 필수적입니다. 매개변수 구간은 t in 시작값..끝값 형태로 부여합니다.
사이클로이드 곡선 예제는 다음과 같이 간결하게 작성됩니다.
r = 1
draw: param(x = r*(t - sin(t)), y = r*(1 - cos(t))), t in 0..4*pi, thick=1.2pt
### 극방정식 곡선
원점으로부터의 거리 이 회전각 theta에 의해 주어지는 곡선은 polar() 함수를 사용합니다.
draw: polar(r = 2*(1 - cos(theta))), theta in 0..2pi, color=#blue, thick=1.5pt
위 코드는 대표적인 극곡선인 심장형(Cardioid) 곡선을 그립니다. theta의 범위를 0..2pi로 지정하여 각도가 한 바퀴 도는 동안 변화하는 거리 의 자취를 부드러운 곡선으로 연결합니다.
장미 곡선이나 아르키메데스 나선 역시 동일한 문법으로 에 관한 관계식만 대입하여 표현할 수 있습니다.
음함수 곡선
원, 쌍곡선, 잎사귀형 곡선처럼 와 가 뒤섞인 방정식 꼴의 곡선은 동등 비교 연산자 ==를 사용하여 작성합니다.
draw: x^2 + y^2 - x*y == 3, x in -3..3, y in -3..3, thick=1.5pt, color=#purple
음함수를 그릴 때는 단일 등호 =가 아닌 이중 등호 ==를 적어야 파서가 이를 대입문이 아닌 방정식 조건식으로 인식합니다.
또한 음함수는 평면 전체를 격자 탐색하여 0이 되는 등위선을 추적하므로, 반드시 x in ...과 y in ... 두 축의 탐색 범위를 모두 지정해 주어야 합니다. 회전된 타원이나 데카르트의 엽선처럼 양함수로 쉽게 쪼개지지 않는 대학 수준의 해석학 곡선도 오차 없이 시각화할 수 있습니다.
---
예제
배운 내용을 결합하여 삼차함수 그래프 위의 변곡점 근처에서 접선을 긋고, 두 곡선으로 둘러싸인 영역을 빗금으로 채우는 고난도 수능형 도판을 제작합니다.
@canvas: width=100mm, height=80mm, dpi=300
@view: [-2.5, 3], [-3, 5]
// 좌표축
axis: x, y, O
// 삼차함수 정의 및 접선 추출
f(x) = 0.5*x^3 - x^2 - x + 2
L_tan = tangent_line(f, x=-0.5)
// 교점 탐색
[P1, P2] = isect(f, L_tan)
// 둘러싸인 면적 빗금 채우기
shade: between(f..L_tan, x in P1.x..P2.x), hatch=(45deg, 1.8mm), stroke=0.5pt
// 곡선 및 접선 그리기
draw: f, x in -2..2.6, thick=1.5pt
draw: L_tan, stroke=1pt, color=#red, dash=(4pt, 2pt)
// 접점 및 교점 강조
dot: P1"접점"(nw), P2"교점"(se)
// 함수 이름 라벨
label: (2.2, f(2.2))"$y=f(x)$"(e)
이 코드는 삼차곡선과 직선의 교점을 정확히 추적하여 둘러싸인 적분 영역을 오차 없이 빗금으로 채워내며, 고등 수학 시험지 인쇄 규격에 부합하는 도판을 산출합니다.