문서 소목차
소목차
Welcome to Mathit!
M
Everywhere Mathit!
웹 플레이그라운드
CLI 설치
창의적으로 생각해요
기하학적 사고
알고리즘 퍼즐
수학적 모델링
논리 패러독스
패턴 탐색
모르겠으면 모두와 함께
euler_fan · 5분 전
Mathit 수식 엔진에서 다변수 미분 최적화할 때 어떤 옵션을 주나요?
matrix_dev · 32분 전
LaTeX 기반 표기법과 Mathit DSL 간 변환 벤치마크 공유합니다.
오픈되지 않았어요
AI에게 물어봐도 좋아요
보내기

CSG 연산

고급 엔진 / CSG 연산

7.2 CSG 불리언 영역 연산

단순한 삼각형이나 사각형은 poly: 지시어로 쉽게 채울 수 있지만, 원에서 사각형을 오려낸 형태나 부채꼴과 삼각형이 겹치는 복합 형태는 단일 다각형으로 따내기 어렵습니다. Mathit은 2차원 폐곡선 영역 간의 집합 연산을 수행하는 3대 CSG 불리언 연산자를 지원합니다.

3대 불리언 연산자

영역 객체 사이에 연산 기호를 사용하여 새로운 합성 영역을 만듭니다.

첫째, 교집합 연산자 &입니다.

두 도형이 공통으로 겹치는 영역만을 남깁니다.

둘째, 합집합 연산자 |입니다.

두 도형의 영역을 하나로 합치며, 겹치는 경계선은 자동으로 지워집니다.

셋째, 차집합 연산자 -입니다.

기준 도형에서 빼고자 하는 도형과 겹치는 영역을 칼로 파내듯 제거합니다.

복합 영역 합성 문법

도형 생성 함수인 circle(), poly(), rect() 등을 결합하여 복잡한 음영 구역을 생성합니다.

복사
A = (-2, -1)
B = (2, -1)
C = (0, 3)

O = (0, 1)

// 원과 삼각형의 교집합에서 중앙 사각형 영역을 도려냄
R = (circle(center=O, r=2.5) & poly(A--B--C)) - rect((-1, 0), (1, 2))

// 합성된 영역에 빗금 렌더링
shade: R, fill=#blue/15, hatch=(45deg, 1.8mm), stroke=0.8pt

이 코드는 먼저 반지름 2.5인 원과 삼각형 ABC의 겹치는 부분만을 취한 뒤, 그 결과물에서 가로세로 범위가 (−1,0)(-1, 0)부터 (1,2)(1, 2)까지인 직사각형 구멍을 뚫어 단일 영역 객체 R을 만듭니다.

완성된 영역 R은 shade: 지시어에 그대로 전달되어 단색 음영이나 시험지용 45도 빗금 패턴으로 깔끔하게 마감됩니다.

히포크라테스의 초승달 응용

기하학 교재의 대표적 난제인 직각삼각형의 두 변을 지름으로 하는 반원에서 빗변을 지름으로 하는 반원을 제외한 초승달 영역을 불리언 연산으로 구현합니다.

복사
A = (0, 0)
B = (4, 0)
C = (0, 3)

// 각 변을 지름으로 하는 세 반원 정의
Semi_AB = half_circle(diam=A--B, #top)
Semi_AC = half_circle(diam=A--C, #right)
Semi_BC = half_circle(diam=B--C, #top)
7.2 
// 두 소반원의 합집합에서 빗변의 대반원을 차감
Moon = (Semi_AB | Semi_AC) - Semi_BC

shade: Moon, fill=#gray/30, stroke=1pt
poly: A--B--C, stroke=1.2pt

코드 작성을 통해 두 초승달 구역의 넓이를 시각화할 수 있습니다.

취소