1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Sáng kiến kinh nghiệm) chuyên đề môn tin học hìnhhọc phẳng trong tin học

20 16 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 375,23 KB

Nội dung

CHUYÊN ĐỀ DUYÊN HẢI HÌNH HỌC PHẲNG TRONG TIN HỌC GV: Nguyễn Như Thắng – THPT Chuyên tỉnh Lào Cai Mở đầu 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, số vấn đề thường quan tâm hình học phẳng Có số vấn đề trình bày có nhiều thuật tốn, song tơi trình bày thuật tốn cho tối ưu Toàn code chuyên đề được thể ngôn ngữ C++ Một số đối tượng hình học phẳng 2.1 Hệ trục tọa độ Đề Các Oxy: Xem SGK Hình học 10, tiết 2.2 Điểm hệ trục tọa độ Oxy: Cho điểm M(x,y) hình vẽ, x gọi hoành độ, y gọi tung độ điểm M hệ trục tọa độ Đề Các Oxy, đó: uuur uuuur uuuur r r OM = OM + OM = 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; uur AB Khoảng cách điểm A( x A , y A ) tính bằng: struct Point { int x; int y; }; B ( xB , y B ) d AB = ( xA - xB ) + ( y A - yB ) , độ dài vecctor double dist(Point A,Point B) { return sqrt((B.x-A.x)*(B.x-A.x)+(B.y-A.y)*(B.y-A.y)); } 2.3 Đườ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: uuur uur AM = t AB Þ ( xM - xA ; yM - y A ) = t ( xB - x A ; yB - y A ) Trang ìïï xM - x A = t ( xB - x A ) ị ùùợ yM - y A = t ( yB - y A ) Nếu t0) return 1; //quay trai if (ta; a+c>b Diện tích tam giác tính thơng qua tích có hướng vector sau: r uur uuu r uuu r uuu r uur uuu SD 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 khoảng cách từ điểm C đến đường thẳng d qua điểm A, B sau: uur uuu r A AB ´ AC 2.SD ABC CH = = uur AB AB C B H double dist2(Point A, Point B, Point C){ return 2*sTriangle(A,B,C)/dist(A,B); } 2.7 Đ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 A 1, A2, … , AN Khi diện tích đại số đa giác không tự cắt định công thức sau: Trang S= ( x1 - x2 )( y1 + y2 ) +( x2 - x3 )( y2 + y3 ) +¼ +( xn - x1 )( yn + y1 ) Nếu S>0 ta liệt kê đỉnh theo chiều ngược chiều kim đồng hồ Nếu Sb; sx+=a; sy+=b; } sx/=2,sy/=2; len=abs(sx-a)+abs(sy-b); ans=max(0,abs(px-sx)-lo)+max(0,abs(py-sy)-lo); if (ans result; while (!S.empty()) { Point p = S.top(); result.push_back( p ); Trang 12 S.pop(); } return result; } void display(vector< Point > v) { int start = 0; int maxY = INT_MIN; for(int i = 0; i < v.size(); i++) { if(maxY < v[i].y) { maxY = v[i].y; start = i; } } for(int i = 0; i < v.size(); i++) { int in = start - i; if(in < 0) in += v.size(); cout ::iterator a = tmp.begin(); a != tmp.end(); a++) { bool flag = false; for(vector< Point >::iterator it = result.begin(); it != result.end(); it++) { if(a->x == it->x && a->y == it->y) { flag = true; } } if( ! flag ) { pts.push_back( * a ); } } } int main() { int t; cin >> t; while(t ) { int n; cin >> n; vector< Point > pts(n); for (int i = 0; i < n; i++) cin >> pts[i].x >> pts[i].y; while (n) { vector< Point > result = convexHull(pts, n); display(result); setDifference(pts, result); n = pts.size(); } cout a.x>>a.y>>r>>n; dem=0; for (int i=1; i>b.x>>b.y; if (distSq(a,b)>r*r) dem++; } cout>a[i].y; cnt=0; for (int i=1; icnt) _max=a[i]+a[j]-O; } } cout

Ngày đăng: 15/06/2021, 14:27

TỪ KHÓA LIÊN QUAN

w