CNTT-DHBK Hanoi<br />
hunglt@it-hut.edu.vn<br />
<br />
Đường cong - Curve<br />
<br />
Đường cong trong không gian<br />
3D CURVE<br />
<br />
Why use curves? Quỹ đạo chuyển động của 1 điểm trong<br />
không gian<br />
Đường cong biểu diễn Điểm -curve represents points:<br />
Điểm Biểu diễnvà kiểm soát đường cong -Points representand control-the curve.<br />
Cách tiếp cận này là cơ sở của lĩnh vực Computer Aided Geometric<br />
Design (CAGD).<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
Phân loại<br />
<br />
2<br />
<br />
Biểu diễn Đường cong<br />
<br />
Trên cơ sở ràng buộc giữa điểm và đường trong cả ứng dụng khoa học và<br />
thiết kế ta co thể phân làm 2 loại:<br />
Xấp xỉ-Approximation -<br />
<br />
Được ứng dụng trong mô hình hoá hình học<br />
Nội suy-Interpolation<br />
<br />
Trong thiết kế nôi suy là cần thiết với các đối tượng nhưng không phù hợp<br />
với các đối tượng có hình dáng bất kỳ "free form“.<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
3<br />
<br />
Đường cong tham biến<br />
<br />
Tường minh y=f(x)<br />
y = f(x), z = g(x)<br />
impossible to get multiple values for a single<br />
x<br />
• break curves like circles and ellipses<br />
into segments<br />
not invariant with rotation<br />
• rotation might require further segment<br />
breaking<br />
problem with curves with vertical tangents<br />
• infinite slope is difficult to represent<br />
Không tường minh f(x,y)=0 - Implicit equations:<br />
f(x,y,z) = 0<br />
equation may have more solutions than we<br />
want<br />
• circle: x² + y² = 1, half circle: ?<br />
problem to join curve segments together<br />
• difficult to determine if their tangent<br />
directions agree at their joint point<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
4<br />
<br />
Parametric Curves<br />
<br />
Biểu diễn các đường cong tham biến Parametric representation:<br />
<br />
We have seen the parametric form for a line:<br />
<br />
x = x0t + (1 − t ) x1<br />
<br />
x = x(t), y = y(t), z = z(t)<br />
overcomes problems with explicit and implicit forms<br />
no geometric slopes (which may be infinite)<br />
parametric tangent vectors instead (never infinite)<br />
a curve is approximated by a piecewise polynomial curve<br />
<br />
y = y0t + (1 − t ) y1<br />
z = z0t + (1 − t ) z1<br />
<br />
Note that x, y and z are each given by an equation that<br />
involves:<br />
<br />
Define a parameter space<br />
1D for curves<br />
2D for surfaces<br />
<br />
The parameter t<br />
Some user specified control points, x0 and x1<br />
<br />
Define a mapping from parameter space to 3D points<br />
A function that takes parameter values and gives back 3D points<br />
<br />
This is an example of a parametric curve<br />
<br />
The result is a parametric curve or surface<br />
<br />
Mapping F :t → (x, y, z)<br />
0<br />
<br />
1<br />
<br />
t<br />
(c) SE/FIT/HUT 2002<br />
<br />
5<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
6<br />
<br />
1<br />
<br />
CNTT-DHBK Hanoi<br />
hunglt@it-hut.edu.vn<br />
<br />
Đường cong đa thức bậc ba<br />
<br />
Đường cong bậc 3<br />
<br />
Phải đảm bảo là đường cong không gian với 3 trục toạ độ x, y, z<br />
tránh được những tính toán phức tạp và những phần nhấp nhô ngoài ý<br />
muốn xuất hiện ở những đường đa thức bậc cao<br />
Why cubic?<br />
<br />
x = a1 + b1u + c1u2 + d1u3<br />
y = a2 + b2u + c2u2 + d2u3<br />
z = a3 + b3u + c3u2 + d3u3<br />
Với 3 điểm P0, P1, P2, P3 phương trình<br />
xác định<br />
P'1<br />
<br />
p3<br />
P1<br />
<br />
p2<br />
P'0<br />
<br />
P0<br />
<br />
P0<br />
<br />
7<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
Hermite Spline<br />
<br />
P1<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
8<br />
<br />
Đường cong Hermite<br />
<br />
A spline is a parametric curve defined by control points<br />
The term spline dates from engineering drawing, where a spline was a piece<br />
of flexible wood used to draw smooth curves<br />
The control points are adjusted by the user to control the shape of the curve<br />
<br />
p = p(u) = k0 + k1u + k2u2 + k3u3<br />
p(u) = ∑kiui i∈n<br />
<br />
Phương pháp Hermite dựa trên cơ sở của cách biểu diễn Ferguson hay Coons<br />
năm 60<br />
A Hermite spline is a curve for which the user provides:<br />
The endpoints of the curve<br />
The parametric derivatives of the curve at the endpoints<br />
• The parametric derivatives are dx/dt, dy/dt, dz/dt<br />
That is enough to define a cubic Hermite spline, more derivatives are required<br />
for higher order curves<br />
<br />
p0 và p1 ta có hai độ dốc p0’ và p1’ với u = 0 và u = 1 tại hai<br />
điểm đầu cuối của đoạn [0,1].<br />
We have constraints:<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
The curve must pass through p0 when u=0<br />
The derivative must be p’0 when u=0<br />
The curve must pass through p1 when u=1<br />
The derivative must be p’1 when u=1<br />
<br />
9<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
10<br />
<br />
Basis Functions<br />
A point on a Hermite curve is obtained by multiplying each control point<br />
by some function and summing<br />
The functions are called basis functions<br />
<br />
Thay vào:<br />
p = p(u) = p0(1-3u2+2u3) + p1(3u2-2u3)<br />
+ p0’(u-2u2+u3) + p1’(-u2+u3)<br />
<br />
p = p(u) = [ 1 u u2 u3 ]<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
11<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
12<br />
<br />
2<br />
<br />
CNTT-DHBK Hanoi<br />
hunglt@it-hut.edu.vn<br />
<br />
Đường cong Bezier<br />
Sử dụng điểm và các vector kiểm soát được độ dốc của đường<br />
cong tại nhưng điểm mà nó đi qua.(Hermit)<br />
không được thuận lợi cho việc thiết kế tương tác, không tiếp cận<br />
vào các độ dốc của đường cong bằng các giá trị số (Hermite).<br />
Paul Bezier, RENAULT, 1970 đường và bề mặt UNISURF<br />
<br />
po, p3 tương đương với p0, p1 trên đường Hermite. diểm trung<br />
gian p1, p2 được xác định bằng 1/3 theo độ dài của vector tiếp<br />
tuyến tại điểm po và p3<br />
p0’ = 3(p1 – p0)<br />
p3’ = 3(p3 – p2)<br />
p = p(u) = p0(1-3u2+2u3) + p1(3u2-2u3) + p0’(u-2u2+u3) + p1’(u 2 + u 3)<br />
p = p(u) = p0(1 - 3u + 3u2 - u3) + p1(3u-6u2-3u3)<br />
+ p2(3u2 - 3u3) + p3u3<br />
<br />
13<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
14<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
Biểu diễn Ma trận<br />
<br />
Ưu điểm<br />
<br />
1.2<br />
1<br />
0.8<br />
<br />
B0<br />
B1<br />
B2<br />
B3<br />
<br />
0.6<br />
0.4<br />
0.2<br />
0<br />
<br />
0<br />
0<br />
1<br />
<br />
0<br />
− 3 3<br />
p = p(u) = [ 1 u u2 u3 ] 3 − 6 3<br />
<br />
− 1 3 − 3<br />
(c) SE/FIT/HUT 2002<br />
<br />
0<br />
<br />
0<br />
0<br />
<br />
1<br />
<br />
dễ dàng kiểm soát hi`nh dạng của đường cong hơn vector tiếp<br />
tuyến tại p0’ và p1’ của Hermite.<br />
Nằm trong đa giác kiểm soát với số điểm trung gian tuỳ ý( số<br />
bậc tuỳ ý)<br />
đi qua điểm đầu và điểm cuối của đa giác kiểm soát, tiếp xúc với<br />
cặp hai vector của đầu cuối đó<br />
<br />
p0 <br />
p <br />
1<br />
p2 <br />
<br />
p3 <br />
15<br />
<br />
Example<br />
Bezier Curves<br />
<br />
16<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
Sub-Dividing Bezier Curves<br />
M12<br />
<br />
P1<br />
M012<br />
<br />
[UW]<br />
<br />
M0123<br />
<br />
P2<br />
M123<br />
<br />
M01<br />
<br />
M23<br />
<br />
P0<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
17<br />
<br />
P3<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
18<br />
<br />
3<br />
<br />
CNTT-DHBK Hanoi<br />
hunglt@it-hut.edu.vn<br />
<br />
Sub-Dividing Bezier Curves<br />
<br />
Sub-Dividing Bezier Curves<br />
<br />
P1<br />
<br />
P2<br />
<br />
P0<br />
<br />
Step 1: Find the midpoints of the lines joining the original control vertices.<br />
Call them M01, M12, M23<br />
Step 2: Find the midpoints of the lines joining M01, M12 and M12, M23. Call<br />
them M012, M123<br />
Step 3: Find the midpoint of the line joining M012, M123. Call it M0123<br />
The curve with control points P0, M01, M012 and M0123 exactly follows the<br />
original curve from the point with t=0 to the point with t=0.5<br />
The curve with control points M0123 , M123 , M23 and P3 exactly follows the<br />
original curve from the point with t=0.5 to the point with t=1<br />
<br />
P3<br />
<br />
19<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
de Casteljau’s Algorithm<br />
<br />
P2<br />
<br />
n<br />
<br />
p(u ) = ∑ Bi ,n (u ) pi<br />
n<br />
<br />
p′(u ) = n ∑ Bi ,n −1 (u )( pi +1 − Pi )<br />
i =0<br />
<br />
M23<br />
<br />
Bi ,n (u ) = C ( n, i )u i (1 − u ) n −i<br />
<br />
t=0.25<br />
<br />
p0 ... pn : vector vị trí của đa giác n+1 đỉnh<br />
n!<br />
C( n, i) =<br />
i! ( n − i)!<br />
<br />
M01<br />
P3<br />
(c) SE/FIT/HUT 2002<br />
<br />
Tổng quát hoá với n +1 điểm kiểm soát<br />
i =0<br />
<br />
M12<br />
<br />
P0<br />
<br />
20<br />
<br />
Biểu thức Bezier-Bernstain<br />
<br />
You can find the point on a Bezier curve for any parameter value t with a similar<br />
algorithm<br />
Say you want t=0.25, instead of taking midpoints take points 0.25 of the way<br />
<br />
P1<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
21<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
22<br />
<br />
Review:<br />
Bézier Curve Prop’s [1/6]<br />
<br />
Tính chất<br />
P0 và Pn nằm trên đường cong.<br />
Đường cong liên tục và có đạo hàm liên tục tất cả các bậc<br />
Tiếp tuyến của đường cong tại điểm P0 là đường P0P1 và tại<br />
Pn là đường Pn-1Pn .<br />
Đường cong nằm trong đường bao lồi convex hull của các<br />
điểm kiểm soát.<br />
This is because each successive Pi(j) is a convex<br />
combination of the points Pi(j-1) and Pi-1(j-1) .<br />
P1 ,P2 , … ,Pn-1 nằm trên đường cong khi và chỉ khi<br />
đường cong là đoạn thẳng.<br />
(c) SE/FIT/HUT 2002<br />
<br />
23<br />
<br />
We looked at some properties of Bézier curves.<br />
Generally “Good” Properties<br />
Endpoint Interpolation<br />
Smooth Joining<br />
Affine Invariance<br />
Convex-Hull Property<br />
<br />
Generally “Bad” Properties<br />
Not Interpolating<br />
No Local Control<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
24<br />
<br />
4<br />
<br />
CNTT-DHBK Hanoi<br />
hunglt@it-hut.edu.vn<br />
<br />
Problem with Bezier Curves<br />
<br />
Invariance<br />
Translational invariance means that translating the control points and then<br />
evaluating the curve is the same as evaluating and then translating the curve<br />
Rotational invariance means that rotating the control points and then evaluating<br />
the curve is the same as evaluating and then rotating the curve<br />
These properties are essential for parametric curves used in graphics<br />
It is easy to prove that Bezier curves, Hermite curves and everything else we will<br />
study are translation and rotation invariant<br />
Some forms of curves, rational splines, are also perspective invariant<br />
<br />
To make a long continuous curve with Bezier segments<br />
requires using many segments<br />
Maintaining continuity requires constraints on the control<br />
point positions<br />
The user cannot arbitrarily move control vertices and automatically<br />
maintain continuity<br />
The constraints must be explicitly maintained<br />
It is not intuitive to have control points that are not free<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
Can do perspective transform of control points and then evaluate the curve<br />
<br />
25<br />
<br />
Longer Curves<br />
<br />
26<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
Piecewise Bezier Curve<br />
<br />
A single cubic Bezier or Hermite curve can only capture a small class of curves<br />
<br />
P0,1<br />
<br />
At most 2 inflection points<br />
<br />
P0,2<br />
<br />
One solution is to raise the degree<br />
<br />
“knot”<br />
<br />
Allows more control, at the expense of more control points and higher degree<br />
polynomials<br />
Control is not local, one control point influences entire curve<br />
<br />
P0,0<br />
<br />
Total curve can be broken into pieces, each of which is cubic<br />
Local control: Each control point only influences a limited part of the curve<br />
Interaction and design is much easier<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
P1,3<br />
<br />
P0,3<br />
P1,0<br />
<br />
Alternate, most common solution is to join pieces of cubic curve together into<br />
piecewise cubic curves<br />
<br />
P1,1<br />
<br />
27<br />
<br />
Continuity<br />
<br />
P1,2<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
28<br />
<br />
Đường bậc ba Spline<br />
<br />
When two curves are joined, we typically want some degree of continuity<br />
across the boundary (the knot)<br />
C0, “C-zero”, point-wise continuous, curves share the same point where they<br />
join<br />
C1, “C-one”, continuous derivatives, curves share the same parametric<br />
derivatives where they join<br />
C2, “C-two”, continuous second derivatives, curves share the same parametric<br />
second derivatives where they join<br />
Higher orders possible<br />
<br />
Question: How do we ensure that two Hermite curves are C1 across a<br />
knot?<br />
Question: How do we ensure that two Bezier curves are C0, or C1, or C2<br />
across a knot?<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
29<br />
<br />
Spline đi qua n điểm cho trước mà mỗi đoạn là đường bậc ba<br />
độc lập có độ dốc và độ cong liên tục tại mỗi điểm kiểm soát<br />
hay điểm nút<br />
Với n điểm:n-1 đoạn với mỗi đoạn 4 vector hệ số 4(n-1) cho<br />
n-1 đoạn, và 2(n-1) điều kiện biên và n-2 điều kiện về độ dốc<br />
cùng n-2 về độ cong<br />
Spline dùng để chỉ phương pháp biểu diễn đường cong mềm<br />
thông qua các đoạn cong tham biến bậc ba với các điều kiện<br />
liên tục tại các điểm đầu nút<br />
<br />
(c) SE/FIT/HUT 2002<br />
<br />
30<br />
<br />
5<br />
<br />