Giải bài toán pascal bằng pp hình học
Chia sẻ bởi Huy Hoang |
Ngày 14/10/2018 |
50
Chia sẻ tài liệu: Giải bài toán pascal bằng pp hình học thuộc Tư liệu tham khảo
Nội dung tài liệu:
PHƯƠNG PHÁP GIẢI TOÁN HÌNH HỌC BẰNG NNLT PASCAL I. KHÁI NIỆM HÌNH HỌC VÀ CÁC ĐỐI TƯỢNG HÌNH HỌC CƠ BẢN
1. Khái niệm hình học
Đa số các thuật toán đều tập trung vào văn bản và các con số, chúng được thiết kế và xử lý sẵn trong phần lớn các môi trường lập trình. Đối với các bài toán hình học thì tình huống khác hẳn, ngay cả các phép toán sơ cấp trên điểm và đoạn thẳng cũng có thể là một thách thức về tính toán.
Các bài toán hình học thì dễ hình dung một cách trực quan nhưng chính điều đó lại có thể là một trở ngại. Nhiều bài toán có thể giải quyết ngay lập tức bằng cách nhìn vào một mảnh giấy nhưng lại đòi hỏi những chương trình không đơn giản.
Ví dụ: Bài toán kiểm tra một điểm có nằm trong đa giác hay không?
2. Đối tượng hình học cơ bản.
Trong các bài toán tin học thuộc loại hình học có 3 đối tượng cơ bản là: Điểm, đoạn thẳng và đa giác.
- Điểm: Được xác định là cặp (x,y) trong hệ toạ độ đề các.
- Đoạn thẳng: Là cặp điểm được nối với nhau bằng một phần của đường thẳng.
- Đa giác: Là dãy các điểm mà 2 điểm liên tiếp nối với nhau bởi đoạn thẳng và điểm đầu nối với điểm cuối tạo thành đường gấp khúc khép kín.
3. Dữ liệu lưu trữ các đối tượng hình học cơ bản
Type
point = record x,y: integer; end;
Line = record p1,p2: point; end;
Var Polygon: Array[0..Nmax] of Point;
II. MỘT SỐ PHÉP TOÁN CƠ BẢN
1. Vị trí tương đối của điểm so với đường thẳng, tia và đoạn thẳng
Bài toán 1: 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 đi qua 2 đ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-xA)Y + (xAyB - xByA)
- Điểm M thuộc đường thẳng AB khi F(x0,y0) = 0
- Điểm M thuộc đoạn thẳng AB khi:
F(x0,y0)=0 và Min(xA,xB)(x0( Max(xA,xB) và Min(yA,yB)( y0 ( Max(yA,yB)
- Điểm M thuộc tia AB khi F(x0,y0) = 0 và có nghĩa là M phải thoả mãn điều kiện: F(x0,y0) = 0 và (x0-xA)(xB-xA)(0 và (y0-yA)(yB-yA)(0
Chương trình:
var xa,ya,xb,yb,xo,yo:real;
procedure nhap;
begin
repeat
write(`nhap toa do diem A:`); readln(xa,ya);
write(`nhap toa do diem B:`); readln(xb,yb);
until (xa<>xb) or (ya<>yb);
write(`nhap toa do diem M:`); readln(xo,yo);
end;
{=============}
Function F(xo,yo:real):real;
begin
F:= (ya-yb)*xo+(xb-xa)*yo +(xa*yb - xb*ya);
end;
{=============}
Function Max(a,b:real):Real;
begin
if a>b then Max:=a else Max:=b;
end;
{=============}
Function Min(a,b:real):Real;
begin
if a>b then Min:=b else Min:=a;
end;
{====Kiem tra M thuoc duong thang, doan thang, tia===}
Begin
nhap;
if F(xo,yo)=0 then writeln(`M thuoc duong thang AB`)
else writeln(`M ko thuoc duong AB`);
if (F(xo,yo)=0) and (min(xa,xb)<=xo) and (xo<=max(xa,xb)) and (min(ya,yb)<=yo) and (yo<=max(ya,yb))
then writeln(`M thuoc doan thang AB`) else writeln(`M khong thuoc doan thang AB`);
if (F(xo,yo)=0) and ((xo-xa)*(xb-xa)>=0) and ((yo-ya)*(yb-ya)>=0)
then writeln(`M thuoc
1. Khái niệm hình học
Đa số các thuật toán đều tập trung vào văn bản và các con số, chúng được thiết kế và xử lý sẵn trong phần lớn các môi trường lập trình. Đối với các bài toán hình học thì tình huống khác hẳn, ngay cả các phép toán sơ cấp trên điểm và đoạn thẳng cũng có thể là một thách thức về tính toán.
Các bài toán hình học thì dễ hình dung một cách trực quan nhưng chính điều đó lại có thể là một trở ngại. Nhiều bài toán có thể giải quyết ngay lập tức bằng cách nhìn vào một mảnh giấy nhưng lại đòi hỏi những chương trình không đơn giản.
Ví dụ: Bài toán kiểm tra một điểm có nằm trong đa giác hay không?
2. Đối tượng hình học cơ bản.
Trong các bài toán tin học thuộc loại hình học có 3 đối tượng cơ bản là: Điểm, đoạn thẳng và đa giác.
- Điểm: Được xác định là cặp (x,y) trong hệ toạ độ đề các.
- Đoạn thẳng: Là cặp điểm được nối với nhau bằng một phần của đường thẳng.
- Đa giác: Là dãy các điểm mà 2 điểm liên tiếp nối với nhau bởi đoạn thẳng và điểm đầu nối với điểm cuối tạo thành đường gấp khúc khép kín.
3. Dữ liệu lưu trữ các đối tượng hình học cơ bản
Type
point = record x,y: integer; end;
Line = record p1,p2: point; end;
Var Polygon: Array[0..Nmax] of Point;
II. MỘT SỐ PHÉP TOÁN CƠ BẢN
1. Vị trí tương đối của điểm so với đường thẳng, tia và đoạn thẳng
Bài toán 1: 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 đi qua 2 đ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-xA)Y + (xAyB - xByA)
- Điểm M thuộc đường thẳng AB khi F(x0,y0) = 0
- Điểm M thuộc đoạn thẳng AB khi:
F(x0,y0)=0 và Min(xA,xB)(x0( Max(xA,xB) và Min(yA,yB)( y0 ( Max(yA,yB)
- Điểm M thuộc tia AB khi F(x0,y0) = 0 và có nghĩa là M phải thoả mãn điều kiện: F(x0,y0) = 0 và (x0-xA)(xB-xA)(0 và (y0-yA)(yB-yA)(0
Chương trình:
var xa,ya,xb,yb,xo,yo:real;
procedure nhap;
begin
repeat
write(`nhap toa do diem A:`); readln(xa,ya);
write(`nhap toa do diem B:`); readln(xb,yb);
until (xa<>xb) or (ya<>yb);
write(`nhap toa do diem M:`); readln(xo,yo);
end;
{=============}
Function F(xo,yo:real):real;
begin
F:= (ya-yb)*xo+(xb-xa)*yo +(xa*yb - xb*ya);
end;
{=============}
Function Max(a,b:real):Real;
begin
if a>b then Max:=a else Max:=b;
end;
{=============}
Function Min(a,b:real):Real;
begin
if a>b then Min:=b else Min:=a;
end;
{====Kiem tra M thuoc duong thang, doan thang, tia===}
Begin
nhap;
if F(xo,yo)=0 then writeln(`M thuoc duong thang AB`)
else writeln(`M ko thuoc duong AB`);
if (F(xo,yo)=0) and (min(xa,xb)<=xo) and (xo<=max(xa,xb)) and (min(ya,yb)<=yo) and (yo<=max(ya,yb))
then writeln(`M thuoc doan thang AB`) else writeln(`M khong thuoc doan thang AB`);
if (F(xo,yo)=0) and ((xo-xa)*(xb-xa)>=0) and ((yo-ya)*(yb-ya)>=0)
then writeln(`M thuoc
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Huy Hoang
Dung lượng: 264,00KB|
Lượt tài: 0
Loại file: doc
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)