두 쌍선형 보간법 과 하나의 선형 보간법 으로 이루어진 삼선형 보간법.
삼선형 보간법 (영어 : Trilinear interpolation )은 3차원 정규 격자 에서 다변량 보간법 의 한 방법이다. 이는 국부 축 방향 직사각형 각기둥 내의 중간 점
(
x
,
y
,
z
)
{\displaystyle (x,y,z)}
에서의 함수 값을 격자점의 함수 데이터를 사용하여 선형적으로 근사한다. 삼선형 보간법은 수치해석학 , 데이터 분석 , 컴퓨터 그래픽스 에서 자주 사용된다.
삼선형 보간법은 차원
D
=
1
{\displaystyle D=1}
공간에서 작동하는 선형 보간법 과 차원
D
=
2
{\displaystyle D=2}
에서 작동하는 쌍선형 보간법 을 차원
D
=
3
{\displaystyle D=3}
으로 확장한 것이다. 이 보간 방식들은 모두 1차 다항식을 사용하여 2차 정확도를 제공하며, 보간점 주변에
2
D
=
8
{\displaystyle 2^{D}=8}
개의 인접한 미리 정의된 값이 필요하다. 삼선형 보간법은 1차 3차원 텐서 B-스플라인 곡선 보간법과 동등하며, 삼선형 보간 연산자는 3개의 선형 보간 연산자의 텐서 곱이다.
(유한 요소 해석에 사용되는) 임의의 비정형 메쉬 의 경우 다른 보간 방법을 사용해야 한다. 만약 모든 메쉬 요소가 사면체 (3D 단체 )라면, 바리센트릭 좌표 가 간단한 절차를 제공한다.
보간점 C를 둘러싸는 정육면체의 여덟 모서리 점
주기적이고 정육면체 격자에서
x
d
{\displaystyle x_{\text{d}}}
,
y
d
{\displaystyle y_{\text{d}}}
,
z
d
{\displaystyle z_{\text{d}}}
는
각
x
{\displaystyle x}
,
y
{\displaystyle y}
,
z
{\displaystyle z}
와 관련된 작은 좌표 사이의 차이, 즉:
x
d
=
x
−
x
0
x
1
−
x
0
y
d
=
y
−
y
0
y
1
−
y
0
z
d
=
z
−
z
0
z
1
−
z
0
{\displaystyle {\begin{aligned}x_{\text{d}}={\frac {x-x_{0}}{x_{1}-x_{0}}}\\y_{\text{d}}={\frac {y-y_{0}}{y_{1}-y_{0}}}\\z_{\text{d}}={\frac {z-z_{0}}{z_{1}-z_{0}}}\end{aligned}}}
여기서
x
0
{\displaystyle x_{0}}
는
x
{\displaystyle x}
아래의 격자점을 나타내고,
x
1
{\displaystyle x_{1}}
은
x
{\displaystyle x}
위의 격자점을 나타내며,
y
0
,
y
1
,
z
0
{\displaystyle y_{0},y_{1},z_{0}}
및
z
1
{\displaystyle z_{1}}
에 대해서도 마찬가지이다.
먼저
x
{\displaystyle x}
를 따라 보간하면(
C
0
j
k
{\displaystyle C_{0jk}}
로 정의된 큐브의 면을 반대편 면인
C
1
j
k
{\displaystyle C_{1jk}}
로 "밀어내는" 것을 상상해 보라), 다음을 얻는다:
c
00
=
c
000
(
1
−
x
d
)
+
c
100
x
d
c
01
=
c
001
(
1
−
x
d
)
+
c
101
x
d
c
10
=
c
010
(
1
−
x
d
)
+
c
110
x
d
c
11
=
c
011
(
1
−
x
d
)
+
c
111
x
d
{\displaystyle {\begin{aligned}c_{00}&=c_{000}(1-x_{\text{d}})+c_{100}x_{\text{d}}\\c_{01}&=c_{001}(1-x_{\text{d}})+c_{101}x_{\text{d}}\\c_{10}&=c_{010}(1-x_{\text{d}})+c_{110}x_{\text{d}}\\c_{11}&=c_{011}(1-x_{\text{d}})+c_{111}x_{\text{d}}\end{aligned}}}
여기서
c
000
{\displaystyle c_{000}}
은
(
x
0
,
y
0
,
z
0
)
{\displaystyle (x_{0},y_{0},z_{0})}
의 함수 값을 의미한다. 그런 다음 이 값들을 (
y
{\displaystyle y}
를 따라,
C
i
0
k
{\displaystyle C_{i0k}}
에서
C
i
1
k
{\displaystyle C_{i1k}}
로 "밀어내는" 방식으로) 보간하면 다음을 얻는다:
c
0
=
c
00
(
1
−
y
d
)
+
c
10
y
d
c
1
=
c
01
(
1
−
y
d
)
+
c
11
y
d
{\displaystyle {\begin{aligned}c_{0}&=c_{00}(1-y_{\text{d}})+c_{10}y_{\text{d}}\\c_{1}&=c_{01}(1-y_{\text{d}})+c_{11}y_{\text{d}}\end{aligned}}}
마지막으로 이 값들을
z
{\displaystyle z}
를 따라(선을 따라 이동하면서) 보간한다:
c
=
c
0
(
1
−
z
d
)
+
c
1
z
d
.
{\displaystyle c=c_{0}(1-z_{\text{d}})+c_{1}z_{\text{d}}.}
이것은 해당 지점에 대한 예측 값을 제공한다.
삼선형 보간의 결과는 세 축을 따라 보간하는 순서에 독립적이다. 즉,
x
{\displaystyle x}
, 다음
y
{\displaystyle y}
, 마지막으로
z
{\displaystyle z}
와 같은 다른 순서로 해도 같은 값이 나온다.
삼선형 보간의 기하학적 시각화. 원하는 지점의 값과 전체 부피의 곱은 각 모서리 지점의 값과 모서리 대각선 반대편의 부분 부피의 곱의 합과 같다.
위의 연산은 다음과 같이 시각화할 수 있다. 먼저 관심 지점을 둘러싸는 정육면체의 여덟 모서리를 찾는다. 이 모서리들은
c
000
{\displaystyle c_{000}}
,
c
100
{\displaystyle c_{100}}
,
c
010
{\displaystyle c_{010}}
,
c
110
{\displaystyle c_{110}}
,
c
001
{\displaystyle c_{001}}
,
c
101
{\displaystyle c_{101}}
,
c
011
{\displaystyle c_{011}}
,
c
111
{\displaystyle c_{111}}
값을 가진다.
다음으로,
c
000
{\displaystyle c_{000}}
과
c
100
{\displaystyle c_{100}}
사이를 선형 보간하여
c
00
{\displaystyle c_{00}}
을 찾고,
c
001
{\displaystyle c_{001}}
과
c
101
{\displaystyle c_{101}}
사이를 보간하여
c
01
{\displaystyle c_{01}}
을 찾고,
c
011
{\displaystyle c_{011}}
과
c
111
{\displaystyle c_{111}}
사이를 보간하여
c
11
{\displaystyle c_{11}}
을 찾고,
c
010
{\displaystyle c_{010}}
과
c
110
{\displaystyle c_{110}}
사이를 보간하여
c
10
{\displaystyle c_{10}}
을 찾는다.
이제
c
00
{\displaystyle c_{00}}
과
c
10
{\displaystyle c_{10}}
사이를 보간하여
c
0
{\displaystyle c_{0}}
를 찾고,
c
01
{\displaystyle c_{01}}
과
c
11
{\displaystyle c_{11}}
사이를 보간하여
c
1
{\displaystyle c_{1}}
을 찾는다. 마지막으로
c
0
{\displaystyle c_{0}}
와
c
1
{\displaystyle c_{1}}
의 선형 보간을 통해
c
{\displaystyle c}
값을 계산한다.
실제로 삼선형 보간은 두 개의 쌍선형 보간법 과 하나의 선형 보간법을 결합한 것과 동일하다:
c
≈
l
(
b
(
c
000
,
c
010
,
c
100
,
c
110
)
,
b
(
c
001
,
c
011
,
c
101
,
c
111
)
)
{\displaystyle c\approx l\left(b(c_{000},c_{010},c_{100},c_{110}),\,b(c_{001},c_{011},c_{101},c_{111})\right)}
보간 문제의 해를 작성하는 또 다른 방법은 다음과 같다.
f
(
x
,
y
,
z
)
≈
a
0
+
a
1
x
+
a
2
y
+
a
3
z
+
a
4
x
y
+
a
5
x
z
+
a
6
y
z
+
a
7
x
y
z
{\displaystyle f(x,y,z)\approx a_{0}+a_{1}x+a_{2}y+a_{3}z+a_{4}xy+a_{5}xz+a_{6}yz+a_{7}xyz}
여기서 계수들은 선형 시스템을 풀어 찾는다.
[
1
x
0
y
0
z
0
x
0
y
0
x
0
z
0
y
0
z
0
x
0
y
0
z
0
1
x
1
y
0
z
0
x
1
y
0
x
1
z
0
y
0
z
0
x
1
y
0
z
0
1
x
0
y
1
z
0
x
0
y
1
x
0
z
0
y
1
z
0
x
0
y
1
z
0
1
x
1
y
1
z
0
x
1
y
1
x
1
z
0
y
1
z
0
x
1
y
1
z
0
1
x
0
y
0
z
1
x
0
y
0
x
0
z
1
y
0
z
1
x
0
y
0
z
1
1
x
1
y
0
z
1
x
1
y
0
x
1
z
1
y
0
z
1
x
1
y
0
z
1
1
x
0
y
1
z
1
x
0
y
1
x
0
z
1
y
1
z
1
x
0
y
1
z
1
1
x
1
y
1
z
1
x
1
y
1
x
1
z
1
y
1
z
1
x
1
y
1
z
1
]
[
a
0
a
1
a
2
a
3
a
4
a
5
a
6
a
7
]
=
[
c
000
c
100
c
010
c
110
c
001
c
101
c
011
c
111
]
,
{\displaystyle {\begin{aligned}{\begin{bmatrix}1&x_{0}&y_{0}&z_{0}&x_{0}y_{0}&x_{0}z_{0}&y_{0}z_{0}&x_{0}y_{0}z_{0}\\1&x_{1}&y_{0}&z_{0}&x_{1}y_{0}&x_{1}z_{0}&y_{0}z_{0}&x_{1}y_{0}z_{0}\\1&x_{0}&y_{1}&z_{0}&x_{0}y_{1}&x_{0}z_{0}&y_{1}z_{0}&x_{0}y_{1}z_{0}\\1&x_{1}&y_{1}&z_{0}&x_{1}y_{1}&x_{1}z_{0}&y_{1}z_{0}&x_{1}y_{1}z_{0}\\1&x_{0}&y_{0}&z_{1}&x_{0}y_{0}&x_{0}z_{1}&y_{0}z_{1}&x_{0}y_{0}z_{1}\\1&x_{1}&y_{0}&z_{1}&x_{1}y_{0}&x_{1}z_{1}&y_{0}z_{1}&x_{1}y_{0}z_{1}\\1&x_{0}&y_{1}&z_{1}&x_{0}y_{1}&x_{0}z_{1}&y_{1}z_{1}&x_{0}y_{1}z_{1}\\1&x_{1}&y_{1}&z_{1}&x_{1}y_{1}&x_{1}z_{1}&y_{1}z_{1}&x_{1}y_{1}z_{1}\end{bmatrix}}{\begin{bmatrix}a_{0}\\a_{1}\\a_{2}\\a_{3}\\a_{4}\\a_{5}\\a_{6}\\a_{7}\end{bmatrix}}={\begin{bmatrix}c_{000}\\c_{100}\\c_{010}\\c_{110}\\c_{001}\\c_{101}\\c_{011}\\c_{111}\end{bmatrix}},\end{aligned}}}
결과로 다음이 도출된다.
a
0
=
−
c
000
x
1
y
1
z
1
+
c
001
x
1
y
1
z
0
+
c
010
x
1
y
0
z
1
−
c
011
x
1
y
0
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
+
c
100
x
0
y
1
z
1
−
c
101
x
0
y
1
z
0
−
c
110
x
0
y
0
z
1
+
c
111
x
0
y
0
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
1
=
c
000
y
1
z
1
−
c
001
y
1
z
0
−
c
010
y
0
z
1
+
c
011
y
0
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
+
−
c
100
y
1
z
1
+
c
101
y
1
z
0
+
c
110
y
0
z
1
−
c
111
y
0
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
2
=
c
000
x
1
z
1
−
c
001
x
1
z
0
−
c
010
x
1
z
1
+
c
011
x
1
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
+
−
c
100
x
0
z
1
+
c
101
x
0
z
0
+
c
110
x
0
z
1
−
c
111
x
0
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
3
=
c
000
x
1
y
1
−
c
001
x
1
y
1
−
c
010
x
1
y
0
+
c
011
x
1
y
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
+
−
c
100
x
0
y
1
+
c
101
x
0
y
1
+
c
110
x
0
y
0
−
c
111
x
0
y
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
4
=
−
c
000
z
1
+
c
001
z
0
+
c
010
z
1
−
c
011
z
0
+
c
100
z
1
−
c
101
z
0
−
c
110
z
1
+
c
111
z
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
5
=
−
c
000
y
1
+
c
001
y
1
+
c
010
y
0
−
c
011
y
0
+
c
100
y
1
−
c
101
y
1
−
c
110
y
0
+
c
111
y
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
6
=
−
c
000
x
1
+
c
001
x
1
+
c
010
x
1
−
c
011
x
1
+
c
100
x
0
−
c
101
x
0
−
c
110
x
0
+
c
111
x
0
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
,
a
7
=
c
000
−
c
001
−
c
010
+
c
011
−
c
100
+
c
101
+
c
110
−
c
111
(
x
0
−
x
1
)
(
y
0
−
y
1
)
(
z
0
−
z
1
)
.
{\displaystyle {\begin{aligned}a_{0}={}&{\frac {-c_{000}x_{1}y_{1}z_{1}+c_{001}x_{1}y_{1}z_{0}+c_{010}x_{1}y_{0}z_{1}-c_{011}x_{1}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+{}\\&{\frac {c_{100}x_{0}y_{1}z_{1}-c_{101}x_{0}y_{1}z_{0}-c_{110}x_{0}y_{0}z_{1}+c_{111}x_{0}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{1}={}&{\frac {c_{000}y_{1}z_{1}-c_{001}y_{1}z_{0}-c_{010}y_{0}z_{1}+c_{011}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+{}\\&{\frac {-c_{100}y_{1}z_{1}+c_{101}y_{1}z_{0}+c_{110}y_{0}z_{1}-c_{111}y_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{2}={}&{\frac {c_{000}x_{1}z_{1}-c_{001}x_{1}z_{0}-c_{010}x_{1}z_{1}+c_{011}x_{1}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+{}\\&{\frac {-c_{100}x_{0}z_{1}+c_{101}x_{0}z_{0}+c_{110}x_{0}z_{1}-c_{111}x_{0}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{3}={}&{\frac {c_{000}x_{1}y_{1}-c_{001}x_{1}y_{1}-c_{010}x_{1}y_{0}+c_{011}x_{1}y_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}+{}\\&{\frac {-c_{100}x_{0}y_{1}+c_{101}x_{0}y_{1}+c_{110}x_{0}y_{0}-c_{111}x_{0}y_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{4}={}&{\frac {-c_{000}z_{1}+c_{001}z_{0}+c_{010}z_{1}-c_{011}z_{0}+c_{100}z_{1}-c_{101}z_{0}-c_{110}z_{1}+c_{111}z_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{5}=&{\frac {-c_{000}y_{1}+c_{001}y_{1}+c_{010}y_{0}-c_{011}y_{0}+c_{100}y_{1}-c_{101}y_{1}-c_{110}y_{0}+c_{111}y_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{6}={}&{\frac {-c_{000}x_{1}+c_{001}x_{1}+c_{010}x_{1}-c_{011}x_{1}+c_{100}x_{0}-c_{101}x_{0}-c_{110}x_{0}+c_{111}x_{0}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}},\\[4pt]a_{7}={}&{\frac {c_{000}-c_{001}-c_{010}+c_{011}-c_{100}+c_{101}+c_{110}-c_{111}}{(x_{0}-x_{1})(y_{0}-y_{1})(z_{0}-z_{1})}}.\end{aligned}}}
NASA의 의사 코드 , 반복적인 역 삼선형 보간법(꼭짓점과 C 값을 주어졌을 때 Xd, Yd, Zd를 찾음)을 설명한다.
폴 버크, 보간 방법 , 1999년. 이진 논리에 기반하며 어떤 차원으로도 확장될 수 있는(사선형, 오선형, ...) 매우 영리하고 간단한 삼선형 보간법을 찾는 방법을 포함한다.
켄라이트, 자유형 사면체 변형. 국제 시각 컴퓨팅 심포지엄. Springer International Publishing, 2015 [1] .