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;} };

pdf4 trang | Chia sẻ: thucuc2301 | Lượt xem: 489 | Lượt tải: 0download
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:

  • pdfbrief_33401_37222_4920121589tap78so02_nam2011_split_2_9505_2052371.pdf
Tài liệu liên quan