ĐỒ HỌA 2D
ĐỒ HỌA 2D
ĐƯỜNG CONG
ĐƯỜNG CONG
Giảng viên : Bùi Tiến Lên
Trang 2
Phân loại
Phân loại
Quan điểm toán học
- Đường cong được biểu diễn bằng hàm số
-
Đường cong được biểu diễn bằng phương trình tham số
Quan điểm thiết kế
- Đường cong CAD (Computer Aided Design)
Đường cong được biểu diễn bằng
Đường cong được biểu diễn bằng
hàm số
hàm số
Trang 4
Baứi toaựn
Baứi toaựn
Input
Haứm soỏ y = f(x)
Mien ủoỏi soỏ [x
min
, x
max
]
Output
ẹo thũ haứm soỏ
x
max
x
min
y=f(x)
Trang 5
Thuật toán
Thuật toán
Bước 1 : Chia miền đối số ra N
đoạn bằng nhau
x
0
x
1
x
2
x
N-1
x
N
x
min
x
max
Trang 6
Thuaät toaùn
Thuaät toaùn
Böôùc 2 : Tính y
x
0
x
1
x
2
x
N-1
x
N
x
min
x
max
y
0
y
1
y
2
y
N-1
y
N
Trang 7
Thuật toán
Thuật toán
Bước 3 : Kẻ đường gấp khúc đi
qua N + 1 điểm.
x
0
x
1
x
2
x
N-1
x
N
y
0
y
1
y
2
y
N-1
y
N
x
min
x
max
Trang 8
Caøi ñaët
Caøi ñaët
// Hàm vẽ đường cong hàm số
void DrawCurve2D(CDC *pDC, TFunc2D f, double x
min
, double x
max
)
{
double ∆x, x, y;
∆x = (x
max
– x
min
)/N;
x = x
min
;
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 9
Caøi ñaët
Caøi ñaët
// Lớp phương trình hàm
class TFunc2D {
virtual double operator () (double x) = 0;
};
Trang 10
Vấn đề phân đoạn
Vấn đề phân đoạn
Số phân đoạn N là bao nhiêu ?
độ phân giải cột
Trang 11
Ñoà thò ña thöùc baäc ba
Ñoà thò ña thöùc baäc ba
Cho
y = ax
3
+ bx
2
+ cx + d
x ∈ [x
min
, x
max
]
[ ]
4,4x
3x2.0x2.0x1.0y
23
−∈
+−−=
Trang 12
Vấn đề tính giá trò đa thức
Vấn đề tính giá trò đa thức
Cách tính thông thường
a*x*x*x + b*x*x + c*x + d;
Cần 6 phép nhân và 3 phép cộng
Cách tính Horner
((a*x + b)*x + c)*x + d
Cần 3 phép nhân và 3 phép cộng
Cách tính cải tiến
?
Trang 13
Vấn đề tính giá trò đa thức
Vấn đề tính giá trò đa thức
Đa thức bậc nhất y = ax + b
Cách tính thông thường Cách tính cải tiến
y
i
= ax
i
+ b y
0
y
i+1
=
=
ax
0
+ b
y
i
+ a∆x
Tính Tính
y
0
= ax
0
+ b y
0
= ax
0
+ b
y
1
= ax
1
+ b y
1
=
y
0
+ a∆x
y
2
= ax
2
+ b y
2
=
y
1
+ a∆x
y
i
= ax
i
+ b y
i
=
y
i-1
+ a∆x
y
i+1
= ax
i+1
+ b y
i+1
=
y
i
+ a∆x
y
N
= ax
N+1
+ b y
0
=
y
i
+ a∆x
Trang 14
Vấn đề tính giá trò đa thức
Vấn đề tính giá trò đa thức
Đa thức bậc hai y = ax
2
+ bx + c
Cách tính thông thường Cách tính cải tiến
y
i
= ax
i
2
+ bx
i
+ c y
0
∆y
0
y
i+1
∆y
i+1
=
=
=
=
ax
0
2
+ bx
0
+ c
2a∆xx
0
+ a∆x
2
+ b∆x
y
i
+ ∆y
i
∆y
i
+ 2a∆x
2
Trang 15
Vấn đề tính giá trò đa thức
Vấn đề tính giá trò đa thức
Đa thức bậc ba y = ax
3
+ bx
2
+ cx + d
Cách tính cải tiến
y
0
∆y
0
∆∆y
0
y
i+1
∆y
i+1
∆∆y
i+1
=
=
=
=
=
=
ax
0
3
+ bx
0
2
+ cx
0
+ d
3a∆xx
0
2
+ (3a∆x
2
+ 2b∆x)x
0
+ a∆x
3
+ b∆x
2
+ c∆x
6a∆x
2
x
0
+ 6a∆x
3
+ 2b∆x
2
y
i
+ ∆y
i
∆y
i
+ ∆∆y
i
∆∆y
i
+ 6a∆x
3
Đường cong được biểu diễn bằng
Đường cong được biểu diễn bằng
Phương trình tham số
Phương trình tham số
Trang 17
Baøi toaùn
Baøi toaùn
Input:
Phöông trình tham soá
x(t)
y(t)
Mieàn tham soá
t ∈ [t
min
, t
max
]
Output:
( ) ( ) ( )
( ) ( ) ( )
[ ]
π∈
=
=
2,0t
tsint5costy
tcost5costx
Trang 18
Thuật toán
Thuật toán
Bước 1 : Chia miền tham số ra
N đoạn bằng nhau
t
o
t
1
t
2
t
N
Miền tham số
t
min
t
max
Trang 19
Thuaät toaùn
Thuaät toaùn
Böôùc 2 : Tính (x, y)
t
o
t
1
t
2
t
i
t
N
Trang 20
Thuật toán
Thuật toán
Bước 3 : Vẽ đường gấp khúc đi
qua N + 1 điểm
(x
0
, y
0
)
(x
1
, y
1
)
(x
2
, y
2
)
(x
N
, y
N
)
Trang 21
Caøi ñaët
Caøi ñaët
// Hàm vẽ đường cong tham số
void DrawCurve2D(CDC *pDC, TPara2D f, double t
min
, double t
max
)
{
double ∆t, t;
TPoint2D p;
∆t = (t
max
– t
min
)/N;
t = t
min
;
p = f(t);
pDC->MoveTo(ConvertWorldToScreen2D(p));
for(int i=1; i<=N; i++)
{
t += ∆t;
p = f(t);
pDC->LineTo(ConvertWorldToScreen2D(p));
}
}
Trang 22
Caøi ñaët
Caøi ñaët
// Lớp phương trình tham số
class TPara2D {
virtual TPoint2D operator () (double t) = 0;
}
Trang 23
Vaán ñeà phaân ñoaïn
Vaán ñeà phaân ñoaïn
( )
( )
[ ]
π∈
=
=
8,0t
tsintty
tcosttx
( )
( )
[ ]
π∈
=
=
2,0t
tsinty
tcostx
ÑÖÔØNG CONG CAD
ÑÖÔØNG CONG CAD
ÑÖÔØNG CONG BEZIER
ÑÖÔØNG CONG BEZIER