Computer aided ship design Computer aided ship design
Part 1. Curve & Surface Part 1. Curve & Surface
[2008][04-2]
Computer aided ship design Computer aided ship design
Part 1. Curve & Surface Part 1. Curve & Surface
October 2008 Prof. Kyu-Yeul Lee
Department of Naval Architecture and Ocean Engineering,
Seoul National University of College of Engineering
Ch 3.
Ch 3. 곡면 곡면(Surfaces) (Surfaces)
3.1 Parametric Surfaces 3.2 Bezier Surfaces
3.3 B-spline surfaces 3.1 Parametric Surfaces 3.2 Bezier Surfaces
3.3 B-spline surfaces
3.1 Parametric Surfaces
3.1 Parametric Surfaces
2.1 Parametric Surfaces 2.1 Parametric Surfaces
곡면 양함수
음함수
매개 변수
2 2
2
x y
d
z = ± - -
2 2
2
2
y z d
x + + =
q
q f
q f
sin
cos sin
cos cos
d z
d y
d x
=
=
=
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
4
매개
변수 q
q f
q f
sin
cos sin
cos cos
d z
d y
d x
=
=
=
)) , ( ), , ( ), , (
( x f q y f q z f q r
= r
구를 2개의 매개변수 로
표현하면 간단히 수식화 할 수 있다.
)
,
( f q
3.2 Bezier surfaces 3.2 Bezier surfaces
3.2.1 Generation of Bezier surfaces by de Casteljau algorithm
3.2.1 Generation of Bezier surfaces
by de Casteljau algorithm
3.2.1 Generation of Bezier surfaces 3.2.1 Generation of Bezier surfaces
by de
by de Casteljau Casteljau algorithm algorithm
3.2.1.1 Bi-linear Bezier Surface Patch
3.2.1.2 Bi-quadratic Bezier Surface Patch 3.2.1.3 Bi-Cubic Bezier Surface Patch
3.2.1.1 Bi-linear Bezier Surface Patch
3.2.1.2 Bi-quadratic Bezier Surface Patch
3.2.1.3 Bi-Cubic Bezier Surface Patch
3.2.1.1 Bi
3.2.1.1 Bi--linear Bezier Surface Patch linear Bezier Surface Patch
-- Given: 2x2 Bezier control point Given: 2x2 Bezier control point
-- Find: Points on bi Find: Points on bi--linear Bezier Surface Patch linear Bezier Surface Patch
0
b 0
1
b 0
b 11
v
q
uv
v - 1
) u 1
( - u b 0 0 + b 1 0
P
u=
) u 1
( - u b 0 1 + b 1 1
q
u=
v )
1
( - v +
) , ( v u
r = P
uq
uv ) 1 ( - v )
, ( v u
r =
u )
1
( - u b 0 1 + b 1 1
) 1
( - u b 0 0 + ( 1 - v ) u b 1 0 + v
u
u - 1
방법방법: u, v : u, v 방향으로방향으로 ‘de ‘de CasteljauCasteljau algorithm’ algorithm’ 사용사용
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
7
b 10
u P
uu
u - 1
v
u v
0 1
1
u
v .
) (
1
0
,
1 1 0 0
있다 수
얻을 곡면을
하는 꼭지점으로
을 점
계산하면 를
증가하며 까지
에서 를
1 0 1
0
, b , b , b b
r u,v v u
2x2개의 Bezier 조정점을 이용하여 Bi-linear Interpolation 으로 곡면식을 구할 수 있다.
ú û ù ê ë
é
1 1
0 0
1 0
1 0
b b
b b
ú û ù ê ë
é - u
u) 1
[ ( - 1 v) v ] ( )
, ( v u
r =
3.2.1.2 Bi
3.2.1.2 Bi--quadratic Bezier Surface Patch quadratic Bezier Surface Patch
-- Given: 3x3 Bezier control point Given: 3x3 Bezier control point
-- Find: Points on bi Find: Points on bi--quadratic Bezier Surface Patch quadratic Bezier Surface Patch
방법방법: u, v : u, v 방향으로방향으로 ‘de ‘de CasteljauCasteljau algorithm’ algorithm’ 사용사용b
02b
12b
22u
1 u- u
1 u-
u 1 u-
2
p
uq
u22
r
ub
01b
11b
21u
1 u- u
1 u-
u 1 u-
1
p
uq
1u1
r
ub
101 u- u
0
p
uq
u0( )
( )
00 10
10 2
0
0 0
1 1
u
u
u u
u u
- -
= +
= +
p q
b b
b b
( )
( )
01 11
11 2
1
1 1
1 1
u
u
u u
u u
- -
= +
= +
p q
b b
b b
( )
( )
02 12
12 2
2
2 2
1 1
u
u
u u
u u
- -
= +
= +
p q
b b
b b
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
8
u
v b
00b
20u
1 u- u
1 u-
u 1 u-
0
p
uq
u00
r
u( )
( )
02 12
12 2
2
2 2
1 1
u
u
u u
u u
- -
= +
= +
p q
b b
b b
( )
0 0u= 1 - u p
u0+ u q
ur
( ) ( )
( ) ( )
( ) ( )
2 2
00 10 20
2 2
01 11 21
2 2
02 12 22
0
1
2
1 2 1
1 2 1
1 2 1
u
u
u
u u u u
u u u u
u u u u
= - + - +
= - + - +
= - + - +
r r
b b b
b b
b b b
r
b
( ) ( )
2
00 10 20
01 11 21
2
02 12 22
0 1 2
1 2 1
u u u
u
u u
u
é ù
é ù é ù -
ê ú
ê ú = ê ú ê - ú
ê ú ê ú
ê ú
ê ú ê ë ú û
ë û ë û
r r
b b
b r
b
b b
b b b
( )
1 1u= 1 - u p
1u+ u q
ur
( )
2 2u= 1 - u p
u2+ u q
ur
3.2.1.2 Bi
3.2.1.2 Bi--quadratic Bezier Surface Patch quadratic Bezier Surface Patch
-- Given: 3x3 Bezier control point Given: 3x3 Bezier control point
-- Find: Points on bi Find: Points on bi--quadratic Bezier Surface Patch quadratic Bezier Surface Patch
방법방법: u, v : u, v 방향으로방향으로 ‘de ‘de CasteljauCasteljau algorithm’ algorithm’ 사용사용b
02b
12b
22 2r
ub
01b
11b
21 1r
ub
10 1s
v0
s
vv 1 v-
v
1 v-
( u v , )
r
v 1 v-
( )
( )
0 1
1 2
0
1
1 1
u u
v
v u u
v v
v v
= +
= - +
- s
s
r r
r r
( u v , ) ( = 1 - v ) s
0v+ v s
1vr
( ) ( )
2( )
22
0 1
1 2 1
, v
uv v
uv
uu v = - r + - + r
r r
( ) ( )
2( )
20 1 2
1 2
, 1
u u u
v v v
v v
u
é ù ê ú
é ù
= ë - - û ê ú
ê ú ë û
r r r r
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
9
u
v b
00 0b
20r
u( ) ( )
2
00 10 20
01 11 21
2
02 12 22
0 1 2
1 2 1
u u u
u
u u
u
é ù
é ù é ù -
ê ú
ê ú = ê ú ê - ú
ê ú ê ú
ê ú
ê ú ê ë ú û
ë û ë û
r r
b b
b r
b
b b
b b b
( ) ( )
2( )
20 1 2
1 2
, 1
u u u
v v v
v v
u
é ù ê ú
é ù
= ë - - û ê ú
ê ú ë û
r r r r
( ) ( ) ( )
( ) ( )
2
00 10 20
2 2
01 11 21
2
02 12 22
1
1 2 1 2 1
,
u
v v v v u u
u v
u
é - ù
é ù
ê ú
ê ú
é ù
= ë - - û ê ú ê - ú
ê ú
ê ú
ë û ë û
b b b
b b b
b b
r
b
3x3개의 조정점을 이용하여
Bi-Quadratic Bezier Patch를 구할 수 있다.
3.2.1.3 Bi
3.2.1.3 Bi--cubic Bezier Surface Patch cubic Bezier Surface Patch
-- Given: 4x4 Bezier control point Given: 4x4 Bezier control point
-- Find: Points on bi Find: Points on bi--cubic Bezier Surface Patch cubic Bezier Surface Patch
u - 1
u
1 - u
u -
1 u
방법방법: u, v : u, v 방향으로방향으로 ‘de ‘de CasteljauCasteljau algorithm’ algorithm’ 사용사용
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
10
u
u - 1
u u - 1
u 1-u u
u - 1
u v
4x4개의 조정점을 이용하여 Bi-Cubic Bezier Patch를 구할 수 있다.
3
3 0
3
1 1 1 1 3
3 3 3 3 1
0 1 2 3 3
2 2 2 2 3 2
3
3 3 3 3 3 3
( )
( , ) ( ) ( ) ( ) ( ) ( )
( ) ( ) B v u v B u B u B u B u B v
B v B v
é ù
é ù
ê ú
ê ú
ê ú
ê ú
é ù
= ë û ê ú ê ú
ê ú
ê ú
ê ú
ë û ë û
0,0 0,1 0,2 0,
,0 ,1 ,2 ,
,0 ,1 ,2 ,
,0 ,1 ,2 ,
b b b b
b b b b
b b b b b
b b b b
3.2.1.3 Bi
3.2.1.3 Bi--cubic Bezier Surface Patch cubic Bezier Surface Patch
-- Given: 4x4 Bezier control point Given: 4x4 Bezier control point
-- Find: Points on bi Find: Points on bi--cubic Bezier Surface Patch cubic Bezier Surface Patch
방법방법: u, v : u, v 방향으로방향으로 ‘de ‘de CasteljauCasteljau algorithm’ algorithm’ 사용사용Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
11
u v
4x4개의 조정점을 이용하여 Bi-Cubic Bezier Patch를 구할 수 있다.
3
3 0
3
1 1 1 1 3
3 3 3 3 1
0 1 2 3 3
2 2 2 2 3 2
3
3 3 3 3 3 3
( )
( , ) ( ) ( ) ( ) ( ) ( )
( ) ( ) B v u v B u B u B u B u B v
B v B v
é ù
é ù
ê ú
ê ú
ê ú
ê ú
é ù
= ë û ê ú ê ú
ê ú
ê ú
ê ú
ë û ë û
0,0 0,1 0,2 0,
,0 ,1 ,2 ,
,0 ,1 ,2 ,
,0 ,1 ,2 ,
b b b b
b b b b
b b b b b
b b b b
3.3 B
3.3 B--spline surfaces spline surfaces
3.3.1 Generation of B-spline surfaces by tensor-product approach
3.3.2 B-spline surface Interpolation 3.3.1 Generation of B-spline surfaces
by tensor-product approach
3.3.2 B-spline surface Interpolation
3.3.1 Generation of B
3.3.1 Generation of B--spline surfaces spline surfaces by tensor
by tensor--product approach product approach
3.3.1.1 Tensor-product bicubic B-spline surface 3.3.1.2 Programming Guide of Tensor-product bicubic B-spline surface
3.3.1.1 Tensor-product bicubic B-spline surface
3.3.1.2 Programming Guide of Tensor-product
bicubic B-spline surface
3.3.1.1 Tensor
3.3.1.1 Tensor--product product bicubic bicubic B B--spline spline surface (1) surface (1)
-- Given: Control Points of Given: Control Points of bicubic bicubic B B--spline spline surface surface -- Find: Points on Find: Points on bicubic bicubic B B--spline spline surface surface
¡ Given 5x5 Control Points d
ij, u-knots, v-knots,
u-degree(=3), v-degree(=3),
¡ Generate start/end moving
curves and directional curves in cubic B-spline form:
d
14d
44d
04d
24d
345=1 v v76
v v8
d
03d
02d
01)
0
( v d
d
11d
12)
1
( v d
d
23d
22d
21)
2
( v d
d
33d
32)
3
( v d
d
43d
42d
0( ) v = d
00N
03( ) v + d
01N
13( ) v + d
02N
23( ) v + d
03N
33( ) v + d
04N
43( ) v
( )
10 03( )
11 13( )
12 23( )
13 33( )
14 43( )
1
v = N v + d N v + N v + d N v + d N v
d d d
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
14
d
10d
40d
00 20d
d
300=0
u u4=0.4 u5=1
u12
u
u3 7
u6 u u8
u
0=0 v
vv21
v3
v4
d
01d
11d
31d
41d
4( v )
( )
10 03( )
11 13( )
12 23( )
13 33( )
14 43( )
1
v = N v + d N v + N v + d N v + d N v
d d d
( )
20 03( )
21 13( )
22 23( )
23 33( )
24 43( )
2
v = N v + d N v + N v + d N v + d N v
d d d
( )
30 03( )
31 13( )
32 23( )
33 33( )
34 43( )
3
v = N v + d N v + N v + d N v + d N v
d d d
( )
40 03( )
41 13( )
42 23( )
43 33( )
44 43( )
4
v = N v + d N v + N v + d N v + d N v
d d d
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
3
00 01 02 03 04 0
3
10 11 12 13 14 1
3
20 21 22 23 24 2
3
30 31 32 33 34 3
3
40 41 42 43 44
0
2
4 4
1
3
N v N v N v N v N v v
v v v v
é ù
é ù é ù
ê ú
ê ú ê ú
ê ú
ê ú ê ú
ê ú
ê ú = ê ú
ê ú
ê ú ê ú
ê ú
ê ú ê ú
ê ú
ê ú ê ë ú û
ë û ë û
d d d
d d d d d
d d d d d
d d
d
d d d d
d d d d d
d d d d d
3.3.1.1 Tensor
3.3.1.1 Tensor--product product bicubic bicubic B B--spline spline surface (1) surface (1)
-- Given: Control Points of Given: Control Points of bicubic bicubic B B--spline spline surface surface -- Find: Points on Find: Points on bicubic bicubic B B--spline spline surface surface
¡ Given 5x5 Control Points d
ij, u-knots, v-knots,
u-degree(=3), v-degree(=3),
¡ Moving curve can be represented in the following form:
d
14d
44d
04d
24d
345=1 v v76
v v8
d
03d
02d
01)
0
( v d
)
1
( v
d d
2( v )
)
3
( v d
d
43d
42) , ( v u r
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
0
3 3 3 3 3
0 4
1 2
1 2
3 4
N u N u N u N3 u N u
v v v v v
é ù
ê ú
ê ú
ê ú
é ù
= ë û ê ú
ê ú
ê ú
ë û
d d d d d
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
15
d
10d
40d
00 20d
d
300=0
u u4=0.4 u5=1
u21
u
u3 7
u6 u u8
u
0=0 v
vv21
v3
v4
d
01d
41)
4
( v d
[ ]
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
=
) (
) (
) (
) (
) ( )
( ) ( ) ( ) ( ) ( ) , (
3 4 3 3 3 2 3 1 3 0
44 43 42 41 40
34 33 32 31 30
24 23 22 21 20
14 13 12 11 10
04 03 02 01 00
3 4 3
3 3
2 3
1 3
0
v N
v N
v N
v N
v N u
N u N u N u N u N v u
d d d d d
d d d d d
d d d d d
d d d d d
d d d d d
r
åå
= =
=
5
0 5
0
3 3
( ) ( )
j i
j i
ij
N u N v d
( )
0( ) ( )
1( ) ( )
2( ) ( ) ( ) ( ) ( ) ( )
3 3 3 3 3
0 1 2 3 3 4 4
, v N u v N u v N u v N u
u v = + +d + +d v N u
r d d d
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
0
3 3 3 3 3
0 4
1 2
1 2
3 4
N u N u N u N3 u N u
v v v v v
é ù
ê ú
ê ú
ê ú
é ù
= ë û ê ú
ê ú
ê ú
ë û
d d d d d
( ) ( ) ( ) ( ) ( )
( ) ( ) ( ) ( ) ( )
3
00 01 02 03 04 0
3
10 11 12 13 14 1
3
20 21 22 23 24 2
3
30 31 32 33 34 3
3
40 41 42 43 44
0
2
4 4
1
3
N v N v N v N v N v v
v v v v
é ù
é ù é ù
ê ú
ê ú ê ú
ê ú
ê ú ê ú
ê ú
ê ú = ê ú
ê ú
ê ú ê ú
ê ú
ê ú ê ú
ê ú
ê ú ê ë ú û
ë û ë û
d d d
d d d d d
d d d d d
d d
d
d d d d
d d d d d
d d d d d
3.3.1.2 Programming Guide of 3.3.1.2 Programming Guide of Tensor
Tensor--product product bicubic bicubic B B--spline spline surface surface
-- Member Variables of Class Member Variables of Class
class CBsplineSurface {
public:
// member variables int m_nDegree;
double* m_pKnot_U;
int m_nNumOfKnot_U;
double* m_pKnot_V;
int m_nNumOfKnot_V;
Vector** m_pCP;
int m_nNumOfCP_U;
int m_nNumOfCP_V;
// member functions
… };
è 차수
è u 방향 Knot와 개수
è v 방향 Knot와 개수
d10
d40
d00 20
d
d30
0=0
u u4=0.4 u5=1
u21
u
u3 uu76
u8
u
d14
d44
d04
d24
d34
0=0 v v21
v v3
5=1 v v76
v v8
v4
d03
d02
d01
)
0(v d
)
1(v
d d2(v)
)
3(v d
d43
d42
d41
)
4(v d
) , ( vu r
(3차)
(9개)
(9개)
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
16
class CBsplineSurface {
public:
// member variables int m_nDegree;
double* m_pKnot_U;
int m_nNumOfKnot_U;
double* m_pKnot_V;
int m_nNumOfKnot_V;
Vector** m_pCP;
int m_nNumOfCP_U;
int m_nNumOfCP_V;
// member functions
… };
è v 방향 Knot와 개수
è Control Point, u, v 방향 개수 (9개)
(u 방향 5개, v 방향 5개)
3.3.1.2 Programming Guide of 3.3.1.2 Programming Guide of Tensor
Tensor--product product bicubic bicubic B B--spline spline surface surface
-- Member Functions of Class Member Functions of Class
class CBsplineSurface {
public:
// member variables
…
// member functions
…
void SetKnot(double* pKnot_U, int nNumOfKnot_U, double* pKnot_V, int nNumOfKnot_V);
double N(int n, int i, double u, int uv);
Vector GetPoint(double u, double v);
};
d10
d40
d00 20
d
d30
0=0
u u4=0.4 u5=1
u21
u
u3 uu76
u8
u
d14
d44
d04
d24
d34
0=0 v v21
v v3
5=1 v v76
v v8
v4
d03
d02
d01
)
0(v d
)
1(v
d d2(v)
)
3(v d
d43
d42
d41
)
4(v d
) , ( vu r
u 방향 Knot
v 방향 Knot
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
17
class CBsplineSurface {
public:
// member variables
…
// member functions
…
void SetKnot(double* pKnot_U, int nNumOfKnot_U, double* pKnot_V, int nNumOfKnot_V);
double N(int n, int i, double u, int uv);
Vector GetPoint(double u, double v);
};
è Knot 설정
3.3.1.2 Programming Guide of 3.3.1.2 Programming Guide of Tensor
Tensor--product product bicubic bicubic B B--spline spline surface surface
-- Member Functions of Class Member Functions of Class
class CBsplineSurface {
public:
// member variables
…
// member functions
…
void SetKnot(double* pKnot_U, int nNumOfKnot_U, double* pKnot_V, int nNumOfKnot_V);
double N(int n, int i, double u, int uv);
Vector GetPoint(double u, double v);
};
d10
d40
d00 20
d
d30
0=0
u u4=0.4 u5=1
u21
u
u3 uu76
u8
u
d14
d44
d04
d24
d34
0=0 v v21
v v3
5=1 v v76
v v8
v4
d03
d02
d01
)
0(v d
)
1(v
d d2(v)
)
3(v d
d43
d42
d41
)
4(v d
) , ( vu r
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
18
class CBsplineSurface {
public:
// member variables
…
// member functions
…
void SetKnot(double* pKnot_U, int nNumOfKnot_U, double* pKnot_V, int nNumOfKnot_V);
double N(int n, int i, double u, int uv);
Vector GetPoint(double u, double v);
};
è B-spline Basis Function 계산
B-spline Basis Function 계산
(Cox-de Boor Recurrence Formula)
) ( )
( )
(
1 111 1
1
N u
u u
u u u
u N u
u u u
N
ini n i
n n i
i i n
i n i
i
- + +
- + -
- +
-
- + -
-
= -
î í
ì £ <
=
-else
0
if ) 1
(
10 i i
i
u u u u
N
u, v 방향을 구분하는 flag
3.3.1.2 Programming Guide of 3.3.1.2 Programming Guide of Tensor
Tensor--product product bicubic bicubic B B--spline spline surface surface
-- Member Functions of Class Member Functions of Class
class CBsplineSurface {
public:
// member variables
…
// member functions
…
void SetKnot(double* pKnot_U, int nNumOfKnot_U, double* pKnot_V, int nNumOfKnot_V);
double N(int n, int i, double u, int uv);
Vector GetPoint(double u, double v);
};
d10
d40
d00 20
d
d30
0=0
u u4=0.4 u5=1
u21
u
u3 uu76
u8
u
d14
d44
d04
d24
d34
0=0 v v21
v v3
5=1 v v76
v v8
v4
d03
d02
d01
)
0(v d
)
1(v
d d2(v)
)
3(v d
d43
d42
d41
)
4(v d
) , ( vu r
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
19
class CBsplineSurface {
public:
// member variables
…
// member functions
…
void SetKnot(double* pKnot_U, int nNumOfKnot_U, double* pKnot_V, int nNumOfKnot_V);
double N(int n, int i, double u, int uv);
Vector GetPoint(double u, double v);
};
è Parameter u, v에 대한 곡면 상의 점 계산
[ ]
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
=
) (
) (
) (
) (
) ( )
( ) ( ) ( ) ( ) ( )
, (
3 4 3 3 3 2 3 1
3 0
44 43 42 41 40
34 33 32 31 30
24 23 22 21 20
14 13 12 11 10
04 03 02 01 00
3 4 3
3 3
2 3
1 3
0
v N
v N
v N
v N
v N u
N u N u N u N u N v u
d d d d d
d d d d d
d d d d d
d d d d d
d d d d d
r
åå
= =
=
5
0 5
0
3
3
( ) ( )
j i
j i
ij
N u N v
d
3.3.1.2 Programming Guide of 3.3.1.2 Programming Guide of Tensor
Tensor--product product bicubic bicubic B B--spline spline surface surface
-- Member Function Example ‘ Member Function Example ‘GetPoint GetPoint’’
Vector CBsplineSurface::GetPoint(double u, double v) {
// return value
Vector r_u_v(0.0, 0.0, 0.0);
// get curve
for (int i=0; i<m_nNumOfCP_U; i++) {
Vector r_v(0.0, 0.0, 0.0);
for (int j=0; j<m_nNumOfCP_V; j++) {
r_v = r_v + m_pCP[i][j] * N(m_nDegree, j, v, ID_V);
}
r_u_v = r_u_v + N(m_nDegree, i, u, ID_U) * r_v;
}
return r_u_v;
}
è Parameter u, v에 대한 곡면 상의 점 계산
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
20
Vector CBsplineSurface::GetPoint(double u, double v) {
// return value
Vector r_u_v(0.0, 0.0, 0.0);
// get curve
for (int i=0; i<m_nNumOfCP_U; i++) {
Vector r_v(0.0, 0.0, 0.0);
for (int j=0; j<m_nNumOfCP_V; j++) {
r_v = r_v + m_pCP[i][j] * N(m_nDegree, j, v, ID_V);
}
r_u_v = r_u_v + N(m_nDegree, i, u, ID_U) * r_v;
}
return r_u_v;
} [ ]
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
=
) (
) (
) (
) (
) ( )
( ) ( ) ( ) ( ) ( )
, (
3 4 3 3 3 2 3 1
3 0
44 43 42 41 40
34 33 32 31 30
24 23 22 21 20
14 13 12 11 10
04 03 02 01 00
3 4 3
3 3
2 3
1 3
0
v N
v N
v N
v N
v N u
N u N u N u N u N v u
d d d d d
d d d d d
d d d d d
d d d d d
d d d d d
r
åå
= =
=
5
0 5
0
3
3
( ) ( )
j i
j i
ij
N u N v
d
) ( d ) ( d ) ( d ) ( d ) ( d ) (
d
0v =
00N
03v +
01N
13v +
02N
23v +
03N
33v +
04N
43v
3.3.2 B
3.3.2 B--spline spline surfaces Interpolation surfaces Interpolation
3.3.2.1 bicubic B-spline surface interpolation 개요
3.3.2.2 bicubic B-spline surface interpolation 상세 과정 3.3.2.3 Sequences of Finding knots
3.3.2.4 Knot 간격차이가 주는 영향
3.3.2.5 Example of bicubic B-spline Surface Interpolation 3.3.2.1 bicubic B-spline surface interpolation 개요
3.3.2.2 bicubic B-spline surface interpolation 상세 과정 3.3.2.3 Sequences of Finding knots
3.3.2.4 Knot 간격차이가 주는 영향
3.3.2.5 Example of bicubic B-spline Surface Interpolation
p
12p
10p
02p
22p
01p
21v
3.3.2.1
3.3.2.1 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 개요 개요 (1) (1)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
22
p
00p
10p
20u
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
4 , 4
, 4
, 4
, 4
, 0
3 , 3
, 3
, 3
, 3
, 0
2 , 2
, 2
, 2
, 2
, 0
1 , 1
, 1
, 1
, 1
, 0
0 , 0
, 0
, 0
, 0
,
4 3
2 1
4 3
2 1
4 3
2 1
4 3
2 1
4 3
2 1
0
d d
d d
d
d d
d d
d
d d
d d
d
d d
d d
d
d d
d d
d
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
) (
) (
) (
) (
) (
3 4 3 3 3 2 3 1
3 0
v N
v N
v N
v N
v N
[ ( ) ( ) ( ) ( )
43( ) ]
3 3 3
2 3
1 3
0
u N u N u N u N u
) N
, ( v u
r =
5x5 개의 조정점을 구하면 곡면을 생성할 수 있다.
곡선상의 점(P
i,j)과 접선벡터 (t
i,j) 으로부터 중간 조정점(C
i,j)을 구한다.
p
12p
10p
02p
22p
01p
21C
10C
20C
30v ú ú
ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
= ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú ú
û ù
ê ê ê ê ê ê ê
ë é
D - D
D - D
20 20 10 00 00
40 30 20 10 00
P t P t P
C C C C C
1 0
0 0 0
3 0 3
0 0
0 0
0 0
3 0 3
0 0
0 0 1
E E
s s
g b
a
3.3.2.1
3.3.2.1 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 개요 개요 (2) (2)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
23
p
00p
10p
20u
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
= ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú ú
û ù
ê ê ê ê ê ê ê
ë é
D - D
D - D
20 20 10 00 00
40 30 20 10 00
P t P t P
C C C C C
1 0
0 0 0
3 0 3
0 0
0 0
0 0
3 0 3
0 0
0 0 1
E E
s s
g b
a
p
00p
10p
20t
20t
00p
01p
11p
21t
21t
01Bessel end condition으로 접선벡터(t
i,j)를 구한다
Bessel end condition:
곡선을 지난는 3점을 2차식으로 보간(interpolation)한 후, 곡선의 끝점에서의 1차미분값을 구하는 방법
중간 조정점(C
i,j)과 접선 벡터 (t
i,j)
으로부터 B-spline조정점(d
i,j)을 구한다.
3.3.2.1
3.3.2.1 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 개요 개요 (3) (3)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
=
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú ú
û ù
ê ê ê ê ê ê ê
ë é
D - D
D - D
22 22
21 20
20
24 23 22 21 20
C t C
t C
d d d d d
1 0
0 0
0
3 0 3
0 0
0 0
0 0
3 0 3
0 0
0 0
1
E E
s s
g b
a
p
12p
02p
22p
01p
21C
10C
20C
30v
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
24
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
=
ú ú ú ú ú ú
û ù
ê ê ê ê ê ê
ë é
ú ú ú ú ú ú ú
û ù
ê ê ê ê ê ê ê
ë é
D - D
D - D
22 22
21 20
20
24 23 22 21 20
C t C
t C
d d d d d
1 0
0 0
0
3 0 3
0 0
0 0
0 0
3 0 3
0 0
0 0
1
E E
s s
g b
a
p
00p
10p
20u v
C
22C
20C
21t
22t
20Bessel end condition으로 접선벡터(t
i,j)를 구한다
3.3.2.2
3.3.2.2 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 상세 상세 과정 과정 (1) (1)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
p
00p
10p
02p
12p
22p
01p
21p
11v
4 6
6 6
5.4 3.6
1. u 방향 knot를 결정
l 주어진 점들의 u방향 거리를 계산한다
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
25
p
00p
10p
20u
4 6
q Given
l
곡면이 지나야할 점들의 좌표
l
점들은 사각형 grid 형태여야 함 (예, 2x2)
3.3.2.2
3.3.2.2 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 상세 상세 과정 과정 (2) (2)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
p
00p
10p
02p
12p
22p
01p
21p
11v
0 6
12 0 5.4
9
1. u 방향 knot를 결정
l 주어진 점들의 u방향 거리를 계산한다
l 계산한 거리를 각 점별로 누적한다. 이 거리를
곡면의 u방향 knot라고 부른다
4 6
6 6
5.4 3.6
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
26
p
00p
10p
200
u4
10
q Given
l
곡면이 지나야할 점들의 좌표
l
점들은 사각형 grid 형태여야 함 (예, 2x2)
4 6
3.3.2.2
3.3.2.2 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 상세 상세 과정 과정 (3) (3)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
p
00p
10p
02p
12p
22p
01p
21p
11v
1
1 0.5
0.6
1. u 방향 knot를 결정
l 주어진 점들의 u방향 거리를 계산한다
l 계산한 거리를 각 점별로 누적한다. 이 거리를
곡면의 u방향 knot라고 부른다
l 마지막 점의 knot값으로 각 점의 knot값을 나누어 정규화된 knot값을 계산한다
0 6
12 0 5.4
9
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
27
p
00p
10p
20u
1
1 0.4
q Given
l
곡면이 지나야할 점들의 좌표
l
점들은 사각형 grid 형태여야 함 (예, 2x2)
0 4
10
3.3.2.2
3.3.2.2 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 상세 상세 과정 과정 (4) (4)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
p
00p
10p
02p
12p
22p
01p
21p
11v
0 0.5
1
1. u 방향 knot를 결정
l 주어진 점들의 u방향 거리를 계산한다
l 계산한 거리를 각 점별로 누적한다. 이 거리를
곡면의 u방향 knot라고 부른다
l 마지막 점의 knot값으로 각 점의 knot값을 나누어 정규화된 knot값을 계산한다
l 정규화된 knot값들을 v방향으로 평균하여 최종적인
u방향 knot값을 계산한다
0
0
1
1 0.5
0.6
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
28
p
00p
10p
20u
q Given
l
곡면이 지나야할 점들의 좌표
l
점들은 사각형 grid 형태여야 함 (예, 2x2)
01 0.4
3.3.2.2
3.3.2.2 bicubic bicubic B B--spline spline Surface Interpolation Surface Interpolation 상세 상세 과정 과정 (5) (5)
-- Given: Given: 곡면상의 곡면상의 99개 개 점과 점과 4 4 꼭지점에서의 꼭지점에서의 u, v u, v방향의 방향의 접선벡터 접선벡터 -- Find: Control Points of Find: Control Points of bicubic bicubic B B--spline spline Surface Surface
p
00p
10p
02p
12p
22p
01p
21p
11v
1. u 방향 knot를 결정
l 주어진 점들의 u방향 거리를 계산한다
l 계산한 거리를 각 점별로 누적한다. 이 거리를
곡면의 u방향 knot라고 부른다
l 마지막 점의 knot값으로 각 점의 knot값을 나누어 정규화된 knot값을 계산한다
l 정규화된 knot값들을 v방향으로 평균하여 최종적인
u방향 knot값을 계산한다
2. u 방향 점들을 보간하는 B-spline 곡선을 계산
l 최종적인 u방향 knot와 점들을 지나는 B-spline 곡선과 그 조정점을 계산한다
0 0.5
1
Computer Aided Ship Design 2008
Computer Aided Ship Design 2008 –– PART I: Curve & SurfacePART I: Curve & Surface
29
p
00p
10p
20u
q Given
l
곡면이 지나야할 점들의 좌표
l
점들은 사각형 grid 형태여야 함 (예, 2x2)
2. u 방향 점들을 보간하는 B-spline 곡선을 계산
l 최종적인 u방향 knot와 점들을 지나는 B-spline 곡선과 그 조정점을 계산한다
3. v 방향 knot 간격을 u뱡향과 동일한 방법으로 구함
4. u 방향 B-spline 곡선의 조정점을 보간하는 v방향 B-spline 곡선을 계산
l u방향 B-spline 곡선의 조점정에 대해서 1번과 같은 방법으로 v방향 knot를 결정한 후, 이를 이용하여 v방향 B-spline 곡선 (빨간점선)을 생성한다. 이 곡선의 조정점 (파란점) 이 최종 B-spline 곡면의 조정점이다