chuyên đề phương pháp giải một số bài toán hình học trong tin học

41 158 0
chuyên đề phương pháp giải một số bài toán hình học trong tin học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC A MỞ ĐẦU Lý chọn đề tài 2 Mục đích đề tài B NỘI DUNG Một số khái niệm 1.1 Điểm hệ trục tọa độ Oxy 1.2 Đường thẳng 1.3 Tích chéo, tích vơ hướng vector 1.4 Phương trình tương quan điểm đường thẳng, đoạn thẳng Một số tốn hình học 2.1 Dạng Mối quan hệ điểm, đoạn thẳng, đa giác 2.2 Dạng Các toán khoảng cách 15 2.3 Dạng Các toán diện tích đa giác 20 Bài tập tổng hợp 31 3.1 Bài Bán kính lớn 31 3.2 Bài Đặt chân chống (FLATFORM) 32 3.3 Bài Góc lớn 33 3.4 Bài Trò chơi với Set 35 3.5 Bài Maxim xe đạp 38 Một số tập tự luyện 40 C KẾT LUẬN 41 D TÀI LIỆU THAM KHẢO 41 CHUN ĐỀ: "PHƯƠNG PHÁP GIẢI MỘT SỐ BÀI TỐN HÌNH HỌC TRONG TIN HỌC" A MỞ ĐẦU Lý chọn đề tài Bài toán tin học thường đa dạng có nhiều cách để giải Việc áp dụng cách giải đòi hỏi sáng tạo khả vận dụng người Để giải tốn tin học ta sử dụng chiến lược như: Phương pháp quay lui, phương pháp nhánh cận, phương pháp tham lam, phương pháp chia để chị, phương pháp quy hoạch động …, sử dụng cấu trúc liệu đặc biệt ngăn xếp, hàng đợi, … Ngồi cịn có số toán sử dụng nhiều kiến thức toán (số học, tổ hợp, hình học) Trong trình dạy thấy em học sinh làm tốt dạng nhiên gặp tốn có liên quan đến kiến thức hình học em thường khơng làm được, có làm kết sai Lý em khó cài đặt, khơng tìm thuật giải thích hợp, có thuật giải kết sai sai số q trình tính tốn Để giúp học sinh dễ dàng tiếp thu, giải dạng tốn tơi tìm hiểu viết chuyên đề “Phương pháp giải số tốn hình học tin học” Trong nội dung chun đề giới thiệu số phương pháp giải tập tin học sử dụng kiến thức hình học Từ em tự tin làm việc với tốn hình học, tránh sai sót khơng đáng có Mục đích đề tài Có nhiều tốn hình học phẳng, quan sát mắt thường lời giải hiển nhiên, nhiên muốn lập trình máy tính để giải lại khó khăn, lại vấn đề hồn tồn khác Nhưng có kiến thức tốn hình học phẳng tốt, học sinh hồn tồn làm chủ tốn hình học phẳng lời giải nhiều lại điều đơn giản Trong Chuyên đề này, muốn chia sẻ số kiến thức tốn hình học phẳng áp dụng tin học số vấn đề quan tâm Có số tốn trình bày có nhiều cách giải, song tơi trình bày thuật tốn cho tối ưu Tồn code chuyên đề thể ngôn ngữ C++, cơng thức tốn học soạn thảo phần mềm MathType B NỘI DUNG Một số khái niệm 1.1 Điểm hệ trục tọa độ Oxy Cho điểm M(x,y) hình vẽ, x gọi hồnh độ, y gọi tung độ điểm M hệ trục tọa độ Đề Các Oxy, đó: ⃗⃗⃗⃗⃗⃗ OM = ⃗⃗⃗⃗⃗⃗⃗⃗ 0M1 + ⃗⃗⃗⃗⃗⃗⃗⃗ 0M2 = x.i⃑ + y j - Giả sử x,y số nguyên, biểu diễn điểm M máy tính dùng hai cách sau: typedef pair Point; struct Point { int x; int y; }; - Khoảng cách điểm A( xA , yA ) B( xB , yB ) , độ dài vecctor 2 ⃗⃗⃗⃗⃗ x A xB y A yB AB tính bằng: d AB double dist(Point A,Point B) { return sqrt((B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y)); } 1.2 Đường thẳng Đường thẳng mặt phẳng xác định biết điểm A, B phân biệt nằm đường thẳng Khi đường thẳng xác định tập hợp điểm M(x,y) cho: AM t AB ( xM x A ; yM y A ) t ( xB x A ; yB y A ) xM x A t ( xB x A ) yM y A t ( y B y A ) Nếu tb Diện tích tam giác tính thơng qua tích có hướng vector sau: 1 S ABC AB AC AB AC sin(AB,AC) 2 double sTriangle(Point A, Point B, Point C) { double s=(B.x-A.x)*(C.y-A.y)-(B.y-A.y)*(C.x-A.x); return abs(s/2); } Dựa vào diện tích tam giác, ta tính C khoảng cách từ điểm C đến đường thẳng d qua điểm A, B sau: CH 2.S ABC AB AB AC A B AB double dist2(Point A, Point B, Point C) { return 2*sTriangle(A,B,C)/dist(A,B); } H 1.3.5 Đa giác Đa giác đường gấp khúc khép kín Trong lập trình, đa giác lưu dãy đỉnh liên tiếp A1, A2, … , AN Khi diện tích đại số đa giác không tự cắt định công thức sau: x1 x2 y1 y2 x2 x3 y2 y3 xn x1 yn y1 S Nếu S>0 ta liệt kê đỉnh theo chiều ngược chiều kim đồng hồ Nếu S0) or ((P.y-A.y) * (P.y-B.y)>0) then Exit ; thuoc_doan =True; } Một số tốn hình học 2.1 Dạng Mối quan hệ điểm, đoạn thẳng, đa giác Phương pháp: Đây số dạng tốn hình học đơn giản Việc giải toán dạng chủ yếu sử dụng kiến thức hình học (đã trình bày đầy đủ phần trên) xx * xx 0 y y * y y 0 a) Bài toán 1: Vị trí tương đối điểm so với đường thẳng, tia đoạn thẳng * Vị trí tương đối điểm đoạn thẳng, đường thẳng tia Cho điểm M(x0,y0), A(xA,yA), B(xB,yB) Yêu cầu: a) Kiểm tra M có thuộc đường thẳng qua điểm A, B hay khơng? b) Kiểm tra M có thuộc đoạn thẳng AB hay khơng c) Kiểm tra M có thuộc tia AB hay khơng • Phương pháp: Đặt F(X,Y) = (yA-yB)X + (xB-xB)Y + (xAyB - xByA) - Điểm M thuộc đường thẳng AB F(x0,y0) = - Điểm M thuộc đoạn thẳng AB khi: F(x0,y0)=0 Min(xA,xB) ≤ x0 ≤Max(xA,xB) Min(yA,yB) ≤ y0 ≤ Max(yA,yB) - Điểm M thuộc tia AB F(x0,y0) = có nghĩa M phải thoả mãn điều kiện: F(x0,y0) = (x0-xA)(xB-xA)≥0 (y0-yA)(yB-yA) ≥0 *Điểm thuộc đa giác: Cho đa giác không tự cắt A1A2 AN với đỉnh Ai(xi,yi) nguyên Với điểm A(xA,yA) cho trước, xác định xem A có nằm đa giác cho hay không (Trong trường hợp cạnh đa giác xem nằm đa giác) Ý tưởng: - Lưu toạ độ đỉnh đa giác vào mảng A - Kiểm tra xem điểm A có trùng với đỉnh đa giác - Kiểm tra xem điểm A có nằm cạnh đa giác - Tìm giao điểm có tia Ax (Ax//Ox Ax hướng theo phần dương trục hoành) với cạnh đa giác Trường hợp tia Ax chứa đoạn thẳng cạnh đa giác ta xem tia Ax có điểm chung với cạnh Cụ thể: + Giả sử điểm A(x0,y0), chọn điểm B(xb,yb) với xb=x0+1,yb=y0 + Kiểm tra tia AB có cắt đoạn thẳng CD cách: Bước 1: Tìm giao điểm N đường thẳng AB CD a1=yb-ya; b1=xa-xb; c1=ya*xb-xa*yb; a2=yd-yc; b2=xc-xd; c2=yc*xd-xc*yd; D=a1*b2-a2*b1; Dx=c2*b1-c1*b2; Dy=a2*c1-a1*c2; Xác định: Nếu D ≠0 toạ độ giao điểm N(Dx/D,Dy/D) Bước 2: Kiểm tra N có thuộc tia AM đoạn thẳng CD hay không - Điểm N thuộc đoạn thẳng CD khi: Min(xC,xD) ≤xN ≤ Max(xC,xD) Min(yC,yD) ≤ yN ≤ Max(yC,yD) - Điểm N thuộc tia AB có nghĩa N phải thoả mãn điều kiện: (xN-xA)(xB-xA) ≥0 (yN-yA)(yB-yA) ≥0 - Kiểm tra tia AB chưa cạnh CD hay không cách: (yc=yd)and(yc=yo) - Đếm số giao điểm, số giao điểm lẻ A thuộc đa giác * Đếm số điểm có toạ độ nguyên thuộc đa giác Cho đa giác gồm n đỉnh (x1,y1), (x2,y2), , (xn,yn), biết (2 P[i].x >> P[i].y; } float goc(Point p1, Point p2) { float g, dx, dy; dx = p2.x - p1.x; dy = p2.y - p1.y; if ( dx == 0) if ( dy > 0) g = PI/2; 33 else g = 3*PI/2; else { g = atan(abs(dy)/abs(dx)); if ( dx < 0) if ( dy > 0) g = PI - g; else g = PI + g; else if ( dy < 0) g = 2*PI - g; } return g; } void xuly() { int i, j, t; float r, r1, r2; float g2, g1; //Tim deim co tung nho nhat j = 1; for ( i = 2; i

Ngày đăng: 18/08/2020, 22:11

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan