Sử dụng lý thuyết đại số giải một số bài toán trong hình học - Ôn Ngũ Minh
2. Xác định toạ độ của điểm M sau khi quay
đi một góc quanh điểm P
Hàm point rotate(const point &p, double x0,
double y0, double anpha) trả lại điểm là sự
quay của điểm p quanh điểm có toạ độ (x0,
y0) một góc anpha.
#include
#include
struct point
{
double x, y;
point (double _x = 0, double _y = 0)
{x = _x; y = _y;}
};
4 trang |
Chia sẻ: thucuc2301 | Lượt xem: 592 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Sử dụng lý thuyết đại số giải một số bài toán trong hình học - Ôn Ngũ Minh, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Ôn Ngũ Minh Tạp chí KHOA HỌC & CÔNG NGHỆ 78(02): 8 - 11
8
SỬ DỤNG LÝ THUYẾT ĐẠI SỐ GIẢI MỘT SỐ BÀI TOÁN TRONG HÌNH HỌC
Ôn Ngũ Minh*
Trường Đại học Kỹ thuật Công nghiệp – ĐHTN
TÓM TẮT
Lý thuyết về không gian véc tơ trong đại số tuyến tính có vai trò rất quan trọng. Bài báo này trình
bày một số phép biến đổi affine dựa trên phép đổi cơ sở trong không gian véc tơ. Trong phần cuối
có đƣa ra một số ví dụ minh hoạ và mã nguồn đƣợc viết bằng ngôn ngữ C++.
Từ khoá: Phép tịnh tiến song song, phép xoay quanh gốc toạ độ, toạ độ homogen
MỘT SỐ PHÉP BIẾN ĐỔI CƠ BẢN*
1. Phép tịnh tiến song song
Giả sử M(x, y) là điểm bất kỳ. Xác định toạ độ
của M trong hệ O'x'y' với O' có toạ độ (x0, y0)
và các trục toạ độ của hai hệ đồng phƣơng
chiều.
Gọi (x', y') là toạ độ của M trong hệ trục O'x'y'.
Khi đó
0
0
xx x '
yy y'
hay
0
0
xx ' x
yy' y
(1)
Nhƣng để thực hiện đƣợc bởi phép nhân ma
trận, ta sử dụng toạ độ homogen, khi đó (1)
đƣợc viết lại dƣới dạng:
0
0
x ' 1 0 x x
y' 0 1 y y
1 0 0 1 1
ta có
0
0 1
x ' 1 0 x x x
y' 0 1 y y H y
1 0 0 1 1 1
2. Phép xoay hệ Oxy quanh gốc toạ độ
Giả sử M(x, y) là điểm bất kỳ. Xác định toạ độ
của M trong hệ Ox'y' nhận đƣợc từ hệ Oxy
sau khi xoay theo chiều dƣơng một góc .
Trong R
2, xét hai cơ sở:
S = {e1 = (1, 0), e2 = (0, 1)} và
S' = {e1' = (cos, sin), e2' = (–sin, cos)}
*
Tel: 0913351286
Rõ ràng e1 và e2 tƣơng ứng là các véc tơ đơn
vị của các trục Ox và Oy, còn e1' và e2' tƣơng
ứng là các véc tơ đơn vị của các trục Ox' và
Oy'. Dễ thấy, ma trận của phép biến đổi từ cơ
sở S sang cơ sở S' chính là
P =
sin
sin
cos
cos
Vì là phép biến đổi trực giao nên P–1 = Pt, do
đó sử dụng toạ độ homogen ta có:
2
x ' c sin 0 x x
y' sin c 0 y H y
1 0 0 1 1 1
os
os
3. Phép lấy đối xứng qua trục Ox
Gọi M'(x', y') là điểm đối xứng của điểm M(x,
y) qua trục Ox, dễ thấy x' = x, y' = –y. Trong
R
2, xét hai cơ sở:
S = {e1 = (1, 0), e2 = (0, 1)}
và S' = {e1' = (1,0), e2' = (0, –1)}
Dễ thấy, ma trận của phép biến đổi từ cơ sở S'
sang cơ sở S chính là:
P =
1 0
0 1
Viết theo toạ độ homogen ta có
3
x ' 1 0 0 x x
y' 0 1 0 y H y
1 0 0 1 1 1
.
MỘT SỐ ỨNG DỤNG
1. Xác định toạ độ của điểm N(xN, yN) là đối
xứng của điểm M(x, y) qua đƣờng thẳng có
phƣơng trình y = ax + b
Ta thực hiện 5 bƣớc sau:
Ôn Ngũ Minh Tạp chí KHOA HỌC & CÔNG NGHỆ 78(02): 8 - 11
9
a) Tịnh tiến song song Oxy thành O'x'y' với
O' có toạ độ (0, b)
Toạ độ mới của M(x', y') đƣợc tính theo công
thức
x ' x
y ' A y
1 1
, với A =
1 0 0
0 1 b
0 0 1
b) Xoay hệ O'x'y' quanh gốc O' theo chiều
dƣơng một góc = atan(a) thành hệ O'x"y"
Toạ độ mới của M(x", y") đƣợc tính theo
công thức
2
x" x '
y" H y'
1 1
= 2
x
H A y
1
c) Lấy đối xứng qua trục O'x"
Gọi (xN", yN") là toạ độ của N trong hệ trục
O'x"y", khi đó
N
N 3
x " x"
y " H y"
1 1
= 3 2
x
H H A y
1
d) Xoay hệ O'x"y" quanh gốc O' theo chiều
âm một góc thành hệ O'x'"y'"
Toạ độ của N trong hệ O'x'"y'" đƣợc tính theo
công thức
N N
t
N 2 N
x '" x "
y '" H y "
1 1
= t2 3 2
x
H H H A y
1
e) Tịnh tiến O' về O, nhận đƣợc hệ trục ban
đầu Oxy
Toạ độ của N trong hệ Oxy đƣợc tính theo
công thức
N N
N N
x 1 0 0 x "'
y 0 1 b y "'
1 0 0 1 1
= t4 2 3 2
x
H H H H A y
1
,
Dễ kiểm tra lại rằng H = H4H2
t
H3H2A =
=
cos 2 sin 2 bsin 2
sin 2 cos 2 b(1 cos 2 )
0 0 1
.
Vậy toạ độ của điểm N đối xứng với M(x, y)
qua đƣờng thẳng y = ax + b là
N
N
x xc bsin 2
y xsin 2 yc b 1 c
os2 ysin2
os2 os2
hay
N
N
x xcos2 y b sin 2
y xsin 2 y b cos2 b
Đó chính là công thức chúng ta cần tìm.
2. Xác định toạ độ điểm N(xN, yN) nhận đƣợc
bằng cách xoay điểm M(x, y) quanh điểm (x0,
y0) một góc
Ta thực hiện 3 bƣớc sau:
a) Tịnh tiến song song Oxy thành O'x'y' với
O' có toạ độ (x0, y0)
Toạ độ mới của M(x', y') đƣợc tính theo công
thức
1
x ' x
y ' H y
1 1
,
b) Xoay hệ O'x'y' quanh gốc O' theo chiều
dƣơng một góc – thành hệ O'x"y"
Toạ độ mới của M(x", y") đƣợc tính theo
công thức
t
2
x" x '
y" H y'
1 1
= t2 1
x
H H y
1
c) Tịnh tiến O' về O, nhận đƣợc hệ trục ban
đầu Oxy
Toạ độ của N trong hệ Oxy đƣợc tính theo
công thức
N 0 N
N 0 N
x 1 0 x x "
y 0 1 y y "
1 0 0 1 1
= t5 2 1
x
H H H y
1
=
=
0 0 0
0 0 0
c sin x c y sin x
sin c x sin y c y
0 0 1
os os
os os
x
y
1
Từ đó ta có
Ôn Ngũ Minh Tạp chí KHOA HỌC & CÔNG NGHỆ 78(02): 8 - 11
10
N 0 0 0
N 0 0 0
x x x c y y sin x
y x x sin y y cos y
os
MỘT SỐ VÍ DỤ
1. Xác định toạ độ điểm đối xứng qua đƣờng
thẳng y = ax + b.
Xét điểm M(1,2).
a) Đƣờng thẳng d có phƣơng trình y = x: Khi
đó = 45o nên cos2 = 0, sin2 = 1.
N
N
x 0 1 0 1 2
y 1 0 0 2 1
1 0 0 1 1 1
,
tức là N(2,1).
b) Đƣờng thẳng d có phƣơng trình y = x + 1:
= 45o nên cos2 = 0, sin2 = 1.
N
N
x 0 1 1 1 1
y 1 0 1 2 2
1 0 0 1 1 1
,
tức là N M. Đúng vì M thuộc d.
c) Đƣờng thẳng d có phƣơng trình y = x – 1:
= 45o nên cos2 = 0, sin2 = 1.
N
N
x 0 1 1 1 3
y 1 0 1 2 0
1 0 0 1 1 1
,
tức là N(3, 0).
2. Xác định toạ độ của điểm M sau khi quay
đi một góc quanh điểm P.
Xét điểm M(2,1) và P(1, 1).
a) Với =
2
: cos = 0, sin = 1
xN = 1, yN = 2.
b) Với =
4
: cos = sin =
2
2
xN = yN =
2
2
+ 1
MÃ LỆNH TRONG NGÔN NGỮ C++
1. Xác định toạ độ điểm đối xứng qua đƣờng
thẳng y = ax + b
Hàm point mirror(const point &p, double a,
double b) trả lại điểm đối xứng của điểm p.
#include
#include
struct point
{
double x, y;
point (double _x = 0, double _y = 0)
{x = _x; y = _y;}
};
point mirror(const point &p,
double a, double b)
{
double anpha = atan(a);
double _cos = cos(2*anpha),
_sin = sin(2*anpha);
return point(p.x*_cos + (p.y-b)*_sin,
p.x*_sin - (p.y-b)*_cos + b);
}
void main()
{
point p(1,2), q;
q = mirror(p, 1, 0);
printf("\nq(%lf, %lf)\n",q.x,q.y);
q = mirror(p, 1, 1);
printf("\nq(%lf, %lf)\n",q.x,q.y);
q = mirror(p, 1, -1);
printf("\nq(%lf, %lf)\n",q.x,q.y);
}
2. Xác định toạ độ của điểm M sau khi quay
đi một góc quanh điểm P
Hàm point rotate(const point &p, double x0,
double y0, double anpha) trả lại điểm là sự
quay của điểm p quanh điểm có toạ độ (x0,
y0) một góc anpha.
#include
#include
struct point
{
double x, y;
point (double _x = 0, double _y = 0)
{x = _x; y = _y;}
};
Ôn Ngũ Minh Tạp chí KHOA HỌC & CÔNG NGHỆ 78(02): 8 - 11
11
point rotate(const point &p, double x0,
double y0, double anpha)
{
double _cos = cos(anpha);
double _sin = sin(anpha);
return
point((p.x-x0)*_cos - (p.y-y0)*_sin +
x0,
(p.x-x0)*_sin + (p.y-y0)*_cos + y0);
}
void main()
{
point p(2,1), q;
double quarterPI = atan(1);
q = rotate(p, 1,1, 2*quarterPI);
printf("\nq(%lf, %lf)\n",q.x,q.y);
q = rotate(p, 1,1, quarterPI);
printf("\nq(%lf, %lf)\n",q.x,q.y);
}
TÀI LIỆU THAM KHẢO
[1]. Brown, William A. (1991), Matrices and
vector spaces, New York: M. Dekker,
[2].Weisstein, Eric W., Homogeneous Coordinates
SUMMARY
On Ngu Minh
*
Thai Nguyen University of Technology – TNU
The theory of vector spaces in linear algebra plays a very important role. This paper presents some
affine transformation based on the exchange of basis of vector space. In the last section give some
examples and source code written in C++ language.
* Tel: 0913351286
Các file đính kèm theo tài liệu này:
- brief_33401_37222_4920121589tap78so02_nam2011_split_2_9505_2052371.pdf