Professional Documents
Culture Documents
Lecture 2D 2
Lecture 2D 2
ÑÖÔØNG CONG
Phaân loaïi
Quan ñieåm toaùn hoïc
- Ñöôøng cong ñöôïc bieåu dieãn baèng haøm soá
- Ñöôøng cong ñöôïc bieåu dieãn baèng phöông trình tham soá
Trang 2
Ñöôøng cong ñöôïc bieåu dieãn baèng
haøm soá
Baøi toaùn
Input
Haøm soá y = f(x)
Mieàn ñoái soá [xmin, xmax]
Output
Ñoà thò haøm soá
y=f(x)
x0 x1 x2 xN-1xN
xmin xmax
Trang 5
Thuaät toaùn
Böôùc 2 : Tính y
yN
y1 y
2
y0 yN-1
x0 x1 x2 xN-1xN
xmin xmax
Trang 6
Thuaät toaùn
Böôùc 3 : Keû ñöôøng gaáp khuùc ñi
qua N + 1 ñieåm.
yN
y1 y
2
y0 yN-1
x0 x1 x2 xN-1xN
xmin xmax
Trang 7
Caøi ñaët
// Hàm vẽ đường cong hàm số
void DrawCurve2D(CDC *pDC, TFunc2D &f, double xmin, double xmax)
{
double x, x, y;
x = (xmax – xmin)/N;
x = xmin;
y = f(x);
pDC->MoveTo(ConvertWorldToScreen2D(x, y));
for(int i=1; i<=N; i++)
{
x += x;
y = f(x);
pDC->LineTo(ConvertWorldToScreen2D(x, y));
}
}
Trang 8
Caøi ñaët
// Lớp phương trình hàm
class TFunc2D {
virtual double operator () (double x) = 0;
};
Class TFunc2D
+operator() : double
Trang 9
Vaán ñeà phaân ñoaïn
Soá phaân ñoaïn N laø bao nhieâu ?
Trang 10
Ñoà thò ña thöùc baäc ba
Cho
y = ax3 + bx2 + cx + d
x [xmin, xmax]
Trang 11
Vaán ñeà tính giaù trò ña thöùc
1. Caùch tính thoâng thöôøng
y = a*x*x*x + b*x*x + c*x + d // 6 pheùp nhaân vaø 3 pheùp coäng
Trang 12
Phöông phaùp Newton
Ña thöùc baäc nhaát y = ax + b
böôùc 1
y0 = ax0 + b
böôùc 2
yi+1 = yi + ax
Trang 13
Phöông phaùp Newton
Ña thöùc baäc hai y = ax2 + bx + c
böôùc 1
y0 = ax02 + bx0 + c
1y0 = 2axx0 + ax2 + bx
böôùc 2
yi+1 = yi + yi
1yi+1 = yi + 2ax2
Trang 14
Phöông phaùp Newton
Ña thöùc baäc ba y = ax3 + bx2 + cx + d
böôùc 1
y0 = ax03 + bx02 + cx0 + d
1y0 = 3axx02 + (3ax2 + 2bx)x0 + ax3 + bx2 + cx
2y0 = 6ax2x0 + 6ax3 + 2bx2
böôùc 2
yi+1 = yi + 1yi
1yi+1 = 1yi + 2yi
2yi+1 = 2yi + 6ax3
Trang 15
Ví duï
Ña thöùc baäc ba y = f(x) = x3 + 2x2 + 3x + 1
y5
y4
y3
y2
y1
y0
x
x0 x1 x2 x3 x4 x5
x 0 1 2 3 4 5
y 1 7 23 55 109 191
1y0 6 16 32 54 82
2y0 10 16 22 28
Trang 16
Ña thöùc Lagrange
Input : n + 1 ñieåm (x0, y0) (x1, y1), ... , (xn, yn) vôùi xi < xi+1
Output : Ña thöùc baäc n coù ñoà thò ñi qua n + 1 ñieåm
(x0, y0)
(x1, y1)
(xn, yn)
(xn-1, yn-1)
Trang 17
Coâng thöùc
Phöông trình ña thöùc
i n x x j
y f x
j 0,...,n \ i
y
i 0 x x i j
i
j 0,...,n \ i
y = f(x)
Trang 18
Ña thöùc Lagrange baäc 1
(x1, y1)
x x1 x x0
y fx y0 y1
x0 x1 x1 x0
(x0, y0)
Trang 19
Ña thöùc Lagrange baäc 2
x x1x x 2 y
y=f(x)=
x0 x1x0 x 2 0
x x0 x x 2 y
(x0, y0) x1 x0 x1 x 2 1
(x2, y2)
x x0 x x1 y
(x1, y1) x 2 x0 x 2 x1 2
Trang 20
Ña thöùc Lagrange baäc 3
x x1x x 2 x x3 y
y=f(x)=
(x1, y1) x0 x1x0 x 2 x0 x3 0
(x0, y0) x x0 x x 2 x x3 y
(x3, y3) x1 x0 x1 x 2 x1 x3 1
x x0 x x1x x3 y
(x2, y2)
x 2 x0 x 2 x1x 2 x3 2
x x0 x x1x x 2 y
x3 x0 x3 x1x3 x 2 3
Trang 21
Ñöôøng cong ñöôïc bieåu dieãn baèng
Phöông trình tham soá
Baøi toaùn
Input:
Phöông trình tham soá
x(t)
y(t)
Mieàn tham soá
t [tmin, tmax]
Output:
Trang 23
Thuaät toaùn
Böôùc 1 : Chia mieàn tham soá ra
N ñoaïn baèng nhau
to t1 t2 tN
tmin tmax
Trang 24
Thuaät toaùn
Böôùc 2 : Tính (x, y)
ti tN
t2
t1
to
Trang 25
Thuaät toaùn
Böôùc 3 : Veõ ñöôøng gaáp khuùc ñi
qua N + 1 ñieåm
(xN, yN)
(x2, y2)
(x1, y1)
(x0, y0)
Trang 26
Caøi ñaët
// Hàm vẽ đường cong tham số
void DrawCurve2D(CDC *pDC, TPara2D &f, double tmin, double tmax)
{
double t, t;
TPoint2D p;
t = (tmax – tmin)/N;
t = tmin;
p = f(t);
pDC->MoveTo(ConvertWorldToScreen2D(p));
for(int i=1; i<=N; i++)
{
t += t;
p = f(t);
pDC->LineTo(ConvertWorldToScreen2D(p));
}
}
Trang 27
Caøi ñaët
// Lớp phương trình tham số
class TPara2D {
virtual TPoint2D operator () (double t) = 0;
}
Class TPara2D
+operator() : TPoint2D
Trang 28
Moät soá ñöôøng cong tham soá
xt cos t
1
yt sin t
t 0,2
xt t cos t
yt t sin t
t 0,8
Trang 29
ÑÖÔØNG CONG CAD
ÑÖÔØNG CONG BEZIER
Ñònh nghóa ñöôøng cong
Input
n +1 ñieåm ñieàu khieån {p0, p1, ... , pn}
Output
p1
p0
pn-1
pn Trang 32
Coâng thöùc xaùc ñònh ñöôøng cong
Ptts ñöôøng cong Bezier baäc n ñöôïc taïo bôûi n 1ñieåm ñieàu khieån
k n
pt Bnk t .pk n!
vôùi Bnk t (1 t)nk t k
k 0
k! n k !
t 0,1
hoaëc
k n
xt Bnk t .pk x
k 0
k n
yt Bnk t .pky
k 0
t 0,1
Trang 33
Ñöôøng cong & tham soá
p1
p0p
pn-1
pn
0 1
t
Trang 34
Tính chaát 1
Baûo toaøn qua pheùp bieán ñoåi affine.
Trang 35
Tính chaát 2
Caùc ñieåm ñieàu khieån taïo thaønh bao loài cuûa ñöôøng cong
Trang 36
Tính chaát 3
Coù tính ñoái xöùng
p1 pn-1
p0 pn
pn-1 p1
pn p0
Trang 37
Ñöôøng cong Bezier baäc moät
p1
p(t) = (1 – t)p0 + tp1
t [0, 1]
hoaëc
x(t) = (1 – t)p0x + tp1x
y(t) = (1 – t)p0y + tp1y
t [0, 1]
p0
Trang 38
Ñöôøng cong Bezier baäc hai
p1
p2
p(t) = (1 – t)2p0 + 2(1 – t)tp1 + t2p2
t [0, 1]
hoaëc
x(t) = (1 – t)2p0x + 2(1 – t)tp1x + t2p2x
y(t) = (1 – t)2p0y + 2(1 – t)tp1y + t2p2y
t [0, 1]
p0
Trang 39
Ñöôøng cong Bezier baäc ba
p1 p2
p0 p3
Trang 40
Ñaïo haøm
p’(0) = 3(p1 – p0)
p’(1) = 3(p3 – p2)
p”(0) = 6(p0 – 2p1 + p2)
p”(1) = 6(p1 – 2p2 + p3)
p1 p2
p3
p0
Trang 41
Moät soá ñöôøng cong Bezier baäc ba
Trang 42
Ñoä thaúng cuûa ñöôøng cong Bezier
p1 p2
p0 p3
p0 p1 p1 p2 p2 p3
f
p0 p3
Trang 43
Thuaät toaùn veõ ñeä qui
Veõ Bezier (p0, p1, p2, p3)
Baét ñaàu
Neáu Thaúng (p0, p1, p2, p3) thì
Veõ ñoaïn thaúng p0p3
Ngöôïc laïi
Chia {pi} thaønh {li} vaø {ri}
Veõ Bezier (l0, l1, l2, l3)
Veõ Bezier (r0, r1, r2, r3)
Keát thuùc
Trang 44
Thuaät toaùn veõ ñeä qui
p1 p2
p3
p0
l3 r0 r1
l2
r2
l1
r3
l0 Trang 45
Thuaät toaùn veõ ñeä qui
p0 3p1 3p2 p3
l0 p0 r0
8
p0 p1 p 2p2 p3
l1 r1 1
2 4
p0 2p1 p2 p2 p3
l2 r2
4 2
p0 3p1 3p2 p3
l3 r3 p3
8
Trang 46
ÑÖÔØNG CONG HERMITE
Ñònh nghóa ñöôøng cong
Input
2 ñieåm {p0, p1}
2 vector {v0, v1}
Ouput
v0 v1
p0 p1
Trang 48
Coâng thöùc xaùc ñònh ñöôøng cong
v0 v1
p0 p1
Trang 49
AÛnh höôûng cuûa höôùng vector tieáp tuyeán
Trang 50
AÛnh höôûng cuûa ñoä daøi vector tieáp tuyeán
Trang 51
Chuyeån ñoåi giöõa Bezier & Hermite
v 1H 3pB3 pB2
v
pB2 1 p1H
3
pB3 p1H
p1B pB2
vH0
p
B
3 p1H
pH0 v1H
pB0
Trang 52
Daãn nhaäp
Bao nhieâu
ñöôøng cong?
Trang 53
ÑÖÔØNG CONG PHÖÙC
Ñònh nghóa ñöôøng cong phöùc
Ñöôøng cong phöùc laø söï keát hôïp cuûa nhöõng ñöôøng cong
cô sôû C = {C0, C1, … , Cn-1}
C1
Cn-1
C0
Trang 55
Yeâu caàu thieát keá ñöôøng cong phöùc
Ñoái vôùi ngöôøi thieát keá
1. Deã veõ
2. Lieân tuïc
3. Cuïc boä
Trang 56
Tính lieân tuïc
Lieân tuïc baäc 0
Ci Ci+1
Trang 57
Tính cuïc boä
Thay ñoåi caùc tham soá chæ aûnh höôûng ñeán moät phaàn cuûa
ñöôøng cong
C1 C2
C0
C3 C5
C4
C0
C1 C2 C3 C5
C4
Trang 58
Phaân loaïi
1. Ñöôøng cong Splines
2. Ñöôøng cong B-Splines
3. Ñöôøng cong Nurbs (NonUniform Rational B-Splines)
4. Ñöôøng cong Subdivision
Trang 59
CAÙC ÑÖÔØNG CONG SPLINES
Ñònh nghóa ñöôøng cong Splines
Input
n +1 ñieåm {P0, P1, ... , Pn}
vaø moät soá tham soá khaùc
Output
C = {C0, C1, …, Cn-1} vôùi Ci laø caùc ñöôøng cong Hermite
P1
Pn-1
C0
Cn-1
C1
P0
Pn
P2
C
Trang 61
Free Splines
Laø ñöôøng cong lieân tuïc C0
Trang 62
Cardinal Splines
Laø ñöôøng cong lieân tuïc C1
- Tham soá tension t
vdau
1 t P Pk 1
k 1
Pk-1 2
Pk+2
vcuoi
1 t P P
k2 k
2
Trang 63
AÛnh höôûng cuûa tham soá tension t
Ci Ci+1 Ci Ci+1
t<0 t>0
Trang 64
Catmull-Rom Splines
Laø tröôøng hôïp ñaëc bieät cuûa Cardinal Splines vôùi t = 0
C1 pdau P1
P2
P1 P4
pcuoi P2
P2 P0
vdau
2
P3 P1
P3 vcuoi
2
P0
Trang 65
Kochanek-Bartels Splines
Laø tröôøng hôïp toång quaùt cuûa Cardinal Splines
- Tham soá tension t (ñoä caêng)
- Tham soá bias b (ñoä leäch)
- Tham soá continuity c (lieân tuïc)
Coâng thöùc cho Ck
pdau Pk
pcuoi Pk 1
1
vdau 1 t 1 b1 c Pk Pk 1 1 b1 c Pk 1 Pk
2
1
vcuoi 1 t 1 b1 c Pk 1 Pk 1 b1 c Pk 2 Pk 1
2
Trang 66
AÛnh höôûng cuûa tham soá bias b
Ci Ci+1 Ci Ci+1
b<0 b>0
Trang 67
Natural Splines
Laø ñöôøng cong lieân tuïc C2
Coâng thöùc cho Ck
pdau Pk
pcuoi Pk 1 P1
C0
vdau vk v3
v0
vcuoi vk 1 v1
P3
C1
P0
C2
P2
v2
Trang 68
Natural Splines
Tröôøng hôïp 1 :
Bieát caùc vector v0 vaø vn
1 v0 v0
1 4 1 v1 3P2 P0
1 4 1 v2 3P3 P1
1 4 1 vn1 3Pn Pn 2
1 vn vn
Trang 69
Natural Splines
Tröôøng hôïp 2 :
Ñaïo haøm baäc hai taïi hai ñieåm P0 vaø Pn ñeàu baèng 0
2 1 v0 3P1 P0
1 4 1 v1 3P2 P0
1 4 1 v2 3P3 P1
1 4 1 vn1 3Pn Pn 2
1 2 vn 3Pn Pn1
Trang 70
ÑÖÔØNG CONG B-SPLINES
Ñònh nghóa
Input
- n +1 ñieåm {P0, P1, ... , Pn}
- baäc k
- vector knot t = {t0, t1, … , tn+k-1} mieàn tham soá vôùi ti ti+1
Output
C = {C0, C1, …, Cn-k} vôùi Ci laø caùc ñöôøng cong cô sôû
P1 P2
C0 P5
C1
C2
P0 P3 P4 Trang 72
Coâng thöùc toång quaùt
Phöông trình
in
pt Nki t Pi
i 0
in
xt Nki t Pix
i 0
in
yt Nki t Piy
i 0
Vôùi
1 neáu t ti , ti1
N t
0
i
0 neáu t khaùc
t ti tik t k 1
Ni t
k
Ni t
k 1
Ni1 t
t ik 1 ti tik ti1
Trang 73
Ñöôøng cong cô sôû
Ñöôøng cong cô sôû Ci
coù mieàn tham soá [ti+k-1, ti+k]
coù k+1 ñieåm ñieàu khieån {Pi, Pi+1, ... , Pi+k}
phuï thuoäc vaøo 2k knot {ti, ti+1, ... , ti+2k-1}
Trang 74
Ñöôøng cong
Pn
P1
Cn-k
C0
P2 Pn-1
P0
Loaïi 2 : laëp
t = [0, 0, 0, 0, 1, 1, 1, 1]
Trang 76
B-Splines baäc hai ñeàu
Trang 77
Coâng thöùc
Coâng thöùc cho Ck
Pk Pk 1
p0
2
p1 Pk 1
Pk 1 Pk 2
p2
2
Trang 78
B-Splines baäc ba ñeàu
Trang 79
Coâng thöùc
Coâng thöùc cho Ck
Pk 4Pk 1 Pk 2
p0
6
2Pk 1 Pk 2
p1
3
Pk 1 2Pk 2
p2
3
Pk 1 4Pk 2 Pk 3
p3
6
Trang 80
BEZIER HÖÕU TÆ
Ñònh nghóa ñöôøng cong höõu tæ
Laø ñöôøng cong trong ñoù caùc haøm x(t) vaø y(t) laø caùc
haøm ña thöùc höõu tæ
Trang 82
Phöông trình ñöôøng cong Conic
Daïng chuaån
Ellipse
x2 y2
2 1 a, b 0
a 2
b
Hyperbola
x2 y2
2 1 a, b 0
a 2
b
Parabola
y 2 4ax a0
Trang 83
Phöông trình ñöôøng cong Conic
Daïng tham soá
Ellipse
1 t 2
xt a
1 t 2 t ,
2t
yt b
1 t 2
Hyperbola
1 t 2
xt a
1 t 2 t ,
2t
yt b
1 t 2
Trang 84
Ñöôøng Bezier höõu tæ baäc hai
Input
p0(x0, y0) vaø troïng soá w0
p1(x1, y1) vaø troïng soá w1
p2(x2, y2) vaø troïng soá w2
Output
p1,w1
p0,w0
p2,w2 Trang 85
Coâng thöùc
Heä toïa ñoä thuaàn nhaát (xH, yH, wH)
xH t xH0 x1H xH2
H H H H
y t B0 t y 0 B1 t y1 B2 t y 2
2 2 2
wH t wH wH wH
0 1 2
xH t B02 t xH0 B12 t x1H B22 t xH2
H 2
y t B0 t y 0 B1 t y1 B2 t y 2
H 2 H 2 H
Trang 86
Coâng thöùc
Heä toïa ñoä ñeà caùc (xD, yD)
B02 t xH0 B12 t x1H B22 t xH2
2
x t B0 t w0 B1 t w1 B2 t w2
D 2 2
D
y t B 2
0 t y H
0 B 2
1 t y1
H
B2
2 t y H
2
2 H
B
0 t w H
0 B2
1 t w H
1 B 2
2 t w 2
x H
x H
x H
2
B0 t H B1 t H B2 t H
2
0
2
1
2
x t
D
y0 y1 y2
D
y t B 0
2
t w H
0 B1
2
t w H
1 B2
2 t w H
2
x D
x D
x D
2
B0 t w0 D B1 t w1 D B2 t w2 D
2 0 2 1 2
x t
D
y0 y1 y2
D
y t B 2
0 t w H
0 B2
1 t w H
1 B2
2 t wH
2
Trang 87
Ví duï bieåu dieãn ellipse
Ñöôøng Ellipse
a1 t 2
xt b2t
yt 1 t 2
a a 0
B0 t .1. B1 t .1. B1 t .2.
2 2 2
xt 0 b b
yt B 2
0 t . 1 B 2
1 t . 1 B2 t .2
2
Trang 88
Ví duï bieåu dieãn ellipse
t
Trang 89
Bieåu dieãn chuaån cho ñöôøng conic
Trong bieåu dieãn chuaån w0 = 1, w1 = w, w2 = 1
w = 0 : ñöôøng thaúng
0 < w < 1 : ñöôøng ellipse
w = 1 : ñöôøng parabol
w > 1 : ñöôøng hyperbol
p1,w
A MA w MA
hoaëc w
Mp1 1 w Ap1
p0
M
p2 Trang 90
Bieåu dieãn chuaån cho ñöôøng conic
p1,w
w=2
Hyperbol
w=1
Parabol
w=0.6 Ellipse
Line
w=0
p0 p2
Trang 91
ÑÖÔØNG CONG NURBS
Ñònh nghóa
Input
- n +1 ñieåm cuøng troïng soá {(P0, w0), (P1, w1), ... , (Pn, wn)}
- baäc k
- vector knot t = {t0, t1, … , tn+k-1} mieàn tham soá
Output
C = {C0, C1, …, Cn-k} vôùi Ci laø caùc ñöôøng cong cô sôû
Trang 93
Coâng thöùc toång quaùt
Coâng thöùc trong heä toïa ñoä thuaàn nhaát (x, y, w)
in
xt Nki t Pi x
i 0
in
yt Nki t Pi y
i 0
in
wt Nki t Pi w
i 0
Vôùi
1 neáu t t i , ti1
N t
0
i
0 neáu t khaùc
t ti t ik t k 1
Ni t
k
Ni t
k 1
Ni1 t
t ik 1 ti t ik t i1
Trang 94
Ñöôøng cong cô sôû
Ñöôøng cong cô sôû Ci
coù mieàn tham soá [ti+k-1, ti+k]
coù k+1 ñieåm ñieàu khieån {Pi, Pi+1, ... , Pi+k}
phuï thuoäc vaøo 2k knot {ti, ti+1, ... , ti+2k-1}
Trang 95
Ñöôøng cong
Pn, wn
P1, w1
Cn-k
C0
Pi, wi
tj
Trang 97
ÑÖÔØNG CONG SUBDIVISION
Baøi toaùn
Input : taäp n ñieåm P{P0, P1, ... , Pn-1}
Output : ñöôøng cong C
YÙ töôûng
Laëp laïi quaù trình tinh cheá caùc ñieåm ñieàu khieån P
P P(1) P(2) ...
lim P(n) = C
n
Trang 99
Thuaät toaùn Chaikin
Laëp
Böôùc 1 splitting
Theâm caùc ñænh laø trung ñieåm cuûa caùc caïnh
Böôùc 2 averaging
Laáy ñænh trung bình cho caùc ñænh gaàn nhau
Ngöôøi ta ñaõ chöùng minh caùc ñieåm ñieàu khieån hoäi tuï veà ñöôøng cong
bspline baäc 3 ñeàu C
Trang 100
Thuaät toaùn
Trang 101
Tom tat
Qua trinh tao duong cong subdivision
Trang 102