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

Viết chương trình thực hiện các phép tịnh tiến, phép quay, phép co dãn, phép đối xứng qua điểm m(x0,y0), đối xứng qua đường thẳng và cho thực hiện từng chương trình tùy chọn

35 3,9K 23

Đ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 35
Dung lượng 847 KB

Nội dung

-DrawRectanglePen pen, float x,float y, float a, float b : hàm vẽ một hình chữ nhật bằng bút vẽ pen có tọa độ đỉnh trái trên là x,y, có chiều rộng là a, chiều dài là b.. -DrawElipseP

Trang 1

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN

****** BÁO CÁO BÀI TẬP LỚN

MÔN : ĐỒ HỌA MÁY TÍNH

Đề tài 12 :Viết chương trình thực hiện các phép tịnh tiến, phép quay, phép co dãn, phép đối xứng qua điểm M(x0,y0), đối xứng qua đường thẳng và cho thực hiện

từng chương trình tùy chọn

Giảng viên hướng dẫn : Ths.Nguyễn Cẩm Ngoan

Sinh viên thực hiện : Phạm Hồng Chung

Nguyễn Đức Thoan

Trang 2

MỤC LỤC

Lời nói đầu 3

Chương I Giới thiệu các hàm đồ họa C# và các phép biến đổi hình học 4

I Các hàm đồ họa trong C# 4

II Các phép biến đổi hình học cơ bản 5

1 Phép tịnh tiến: 5

2 Phép quay 6

3 Phép đối xứng 6

Chương II Thiết kế và cài đặt chương trình 9

I Thiết kế chương trình 9

1 Form chính 9

II Cài đặt chương trình 17

Chương III: Tổng kết 39

Trang 3

Lời nói đầu

Có câu rằng “một hình ảnh bằng cả nghìn lời nói ” Điều đó thật không thể phủ nhận.

Và rõ ràng là nếu hiển thị thông tin chỉ với các ký hiệu, chữ cái, chữ số không thôi thì không thể hấp dẫn và dễ hiểu như khi có thêm biểu diễn đồ họa Kỹ thuật đồ hoạ cũng

là công cụ không thể thiếu trong các ngành khoa học kỹ thuật, giáo dục, nghệ thuật, giải trí, quảng cáo (để diễn đạt máy móc thiết bị, kiến trúc, cấu trúc cơ thể, thông tin thiên văn địa lý, hình ảnh minh hoạ ) Chính vì vậy, đồ họa là một vấn đề được quan tâm trong ngành công nghệ thông tin.

Cùng với sự phát triển của tin học, kỹ thuật đồ họa trên máy vi tính, ngày càng trở nên tinh xảo Giao diện các phần mềm ngày nay trở nên thân thiện, đẹp mắt nhờ các thể hiện đồ họa Sự hổ trợ của tin học cho các ngành khác trở nên đắc lực hơn nhờ khả năng đồ họa vi tính, trong đó có ngành giáo dục Mục tiêu để tài chúng em làm là xây dựng một chương trình trợ giúp các em học sinh Trung học cơ sở học các phép biến đổi hình học cơ sở.

Tuy nhiên,trong quá trình nghiên cứu không thể không tránh khỏi những hạn chế và thiếu sót, nên rất mong được sự chỉ bảo, góp ý của quý Thầy Cô và bạn bè Chúng em cũng xin chân thành cảm ơn cô giáo Vũ Minh Yến giảng viên khoa công nghệ thông tin trường Đại học Công Nghiệp Hà Nội đã giúp đỡ chúng em hoàn thành đề tài này

Trang 4

Chương I Giới thiệu các hàm đồ họa C# và các phép biến đổi hình học.

I Các hàm đồ họa trong C#.

-Point(float x, float y) : với x, y là tọa độ của một điểm để xác định một điểm -Pen(Color color,float x ): bút vẽ vói màu color và độ rộng nét vẽ bằng x.

-Brush(Color color): cọ vẽ dùng để vẽ và tô một hình nào đó bằng màu tô color -DrawLine( Pen pen,float x1, float y1,float x2, float y2): hàm vẽ một đoạn thẳng bằng bút vẽ pen nối hai điểm a(x1,y1) và b(x2,y2).

-DrawRectangle(Pen pen, float x,float y, float a, float b) : hàm vẽ một hình chữ nhật bằng bút vẽ pen có tọa độ đỉnh trái trên là (x,y), có chiều rộng là a, chiều dài là b -DrawElipse(Pen pen, float x,float y, float a, float b): hàm vẽ một hình elip bằng bút vẽ pen nội tiếp hình chữ nhật có tọa độ đỉnh trái trên là (x,y), có chiều rộng là a, chiều dài là b.

-DrawPolygon(Pen pen,Point[] dagiac):hàm vẽ các đường thẳng nối liền các điểm có trong mảng dagiac thành một hình đa giác lồi.

-FillRectangle(Brush brush, float x,float y, float a, float b) : hàm vẽ và tô màu một hình chữ nhật như DrawRectangle bằng cọ vẽ brush.

-FillElipse(Brush brush, float x,float y, float a, float b): : hàm vẽ và tô màu một hình elip như DrawElipse bằng cọ vẽ brush.

Trang 5

Trong đó: M x y ' ', '   là ảnh của phép tịnh tiến M x y  ,  theo vector v dx dy   , 

*Chú ý: các phép biến đổi phải thực hiện theo thứ tự trên vì ta có dùng các phép nhân giữa các ma trận,nếu thay đổi vị trí có thể thay đổi ma trận của phép biến đổi.

2 Phép quay

- Phép quay làm thay đổi hướng của đối tượng Một phép quay đòi hỏi phải có

Trang 6

Ta có công thức biến đổi của phép quay điểm P(x,y) quanh gốc tọa độ góc θ:

Hình 2: phép quay điểm M một góc α qunah tâm của hệ trục

*Chú ý: các phép biến đổi phải thực hiện theo thứ tự trên vì ta có dùng các phép nhân giữa các ma trận,nếu thay đổi vị trí có thể thay đổi ma trận của phép biến đổi.

Trang 7

Ma trận biến đổi tương ứng là:

10

+ Phép đối xứng qua đường thẳng song song với Ox:

Hình 4 Phép đối xứng qua đường thẳng song song với Ox Công thức biến đổi: 

2 ' '

Ma trận biến đổi tương ứng:

010

001

+ Phép đối xứng qua đường thẳng song song với Oy:

Hình 5 Phép đối xứng qua đường thẳng song song với Oy Công thức biến đổi:

Trang 8

Ma trận biến đổi tương ứng:

010

001

Trang 9

Chương II Thiết kế và cài đặt chương trình.

g.DrawRectangle(p, new Rectangle(new Point(Convert.ToInt32(x0+x),

Convert.ToInt32(y0-y)), new Size(1, 1)));

}

Trang 10

+ Vẽ tam giác:

Người dùng chọn vẽ tam giác sau đó điền đầy đủ thông tin của hình tam giác như tọa độ 3 đỉnh tam giác rồi nhấn nút vẽ hình.

- Hàm vẽ hình tam giác:

void VeTamGiac(Pen p,float x1,float y1,float x2,float y2,float x3,float y3)

{

g.DrawLine(p, x1+x0, -y1+y0, x2+x0, -y2+y0);

g.DrawLine(p, x2+x0, -y2+y0, x3+x0, -y3+y0);

g.DrawLine(p, x3+x0, -y3+y0, x1+x0, -y1+y0);

}

Trang 11

+Vẽ tứ giác:

Người dùng chọn vẽ tam giác sau đó điền đầy đủ thông tin của hình tam giác như tọa độ 3 đỉnh tam giác rồi nhấn nút vẽ hình.

- Hàm vẽ tứ giác:

void VeTuGiac(Pen p,float x1, float y1, float x2, float y2, float x3, float y3,

float x4, float y4)

{

g.DrawLine(p, x1 + x0, -y1 + y0, x2 + x0, -y2 + y0);

g.DrawLine(p, x2 + x0, -y2 + y0, x3 + x0, -y3 + y0);

g.DrawLine(p, x3 + x0, -y3 + y0, x4 + x0, -y4 + y0);

g.DrawLine(p, x4 + x0, -y4 + y0, x1 + x0, -y1 + y0);

}

Trang 12

- Các phép biến đổi hình học:

+ Phép tịnh tiến:

Người dùng chọn Phép tịnh tiến sau đó nhập tọa độ điểm đầu và điểm cuối của vectơ mà ta cần tịnh tiến theo rồi nhấn thực hiện.

Trang 13

+ Phép quay:

Người dùng chọn Phép quay sau đó nhập tọa độ tâm quay và góc quay rồi nhấn thực hiện.

Trang 14

+ Phép đối xứng:

Phép đối xứng có 3 trường hợp:

- TH1: Đối xứng qua tâm bất kì:

Người dùng chọn Phép đối xứng qua tâm bất kì sau đó nhập tọa độ tâm đối xứng rồi nhấn thực hiện.

Trang 15

- TH2: Đối xứng qua đường thẳng song song với Ox.

Người dùng chọn Phép đối xứng qua đường thẳng song song với Ox sau đó nhập tung độ vào rồi nhấn thực hiện.

Trang 16

- TH3: Đối xứng qua đường thẳng song song với Oy.

Người dùng chọn Phép đối xứng qua đường thẳng song song với Oy sau đó nhập hoành độ vào rồi nhấn nút thực hiện.

Trang 17

II Cài đặt chương trình

Brush b = new SolidBrush(Color.Blue);

Pen p = new Pen(Color.Blue);

float xmax, ymax, x0, y0, tlx, tly;

float ghtrai, ghphai, ghtren, ghduoi;

float x1, x2, x3, x4, y1, y2, y3, y4, r;

float x11, x12, x13, x14, y11, y12, y13, y14;

cbxDoiXung.Items.Add("Qua tâm bâHt kì");

cbxDoiXung.Items.Add("Qua đường thẳMng song song với Ox");

cbxDoiXung.Items.Add("Qua đường thẳMng song song với Oy");

Trang 18

g.DrawLine(Pens.Black, x0, 0, x0, ymax);

g.DrawLine(Pens.Black, x0 + 5, 5, x0, 0);

g.DrawLine(Pens.Black, x0 - 5, 5, x0, 0);

g.DrawLine(Pens.Black, 0, y0, xmax, y0);

g.DrawLine(Pens.Black, xmax-5, y0 - 5, xmax, y0);

g.DrawLine(Pens.Black, xmax-5, y0 + 5, xmax, y0);

g.DrawString("O", new Font("Times New Roman", 18), Brushes.Red, x0-20, y0); g.DrawString("x", new Font("Times New Roman", 15), Brushes.Red, xmax-20, y0); g.DrawString("y", new Font("Times New Roman", 15), Brushes.Red, x0, 10); for (int i = 1; i < ghtrai + ghphai; i++)

g.DrawLine(Pens.Black, i * tlx, y0 + 2, i * tlx, y0 - 2);

for (int i = 1; i < ghtren + ghduoi; i++)

Trang 19

void VeTuGiac(Pen p,float x1, float y1, float x2, float y2, float x3, float y3,

float x4, float y4)

{

g.DrawLine(p, x1 + x0, -y1 + y0, x2 + x0, -y2 + y0);

g.DrawLine(p, x2 + x0, -y2 + y0, x3 + x0, -y3 + y0);

g.DrawLine(p, x3 + x0, -y3 + y0, x4 + x0, -y4 + y0);

g.DrawLine(p, x4 + x0, -y4 + y0, x1 + x0, -y1 + y0);

MessageBox.Show("Dữ liệu nhập vào chưa đuM", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

txtx1.Focus();

}

else

{

VeHinhTron(Pens.Blue, tlx * float.Parse(txtx1.Text), tly *

float.Parse(txty1.Text), tly * float.Parse(txtR.Text));

g.DrawString("I", new Font("Times New Roman", 15), Brushes.Blue,x0 + tlx * float.Parse(txtx1.Text), y0 - tly * float.Parse(txty1.Text));

MessageBox.Show("Dữ liệu nhập vào chưa đuM", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

txtx1.Focus();

}

else

{

Trang 20

g.DrawString("A", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx1.Text), y0 - tly * float.Parse(txty1.Text));

g.DrawString("B", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx2.Text), y0 - tly * float.Parse(txty2.Text));

g.DrawString("C", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx3.Text), y0 - tly * float.Parse(txty3.Text));

x11 = x1 = float.Parse(txtx1.Text);

x12 = x2 = float.Parse(txtx2.Text);

x13 = x3 = float.Parse(txtx3.Text);

y11 = y1 = float.Parse(txty1.Text);

y12 = y2 = float.Parse(txty2.Text);

y13 = y3 = float.Parse(txty3.Text);

{

MessageBox.Show("Dữ liệu nhập vào chưa đuM", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

txtx1.Focus();

}

else

{

VeTuGiac(Pens.Blue, tlx * float.Parse(txtx1.Text), tly *

float.Parse(txty1.Text), tlx * float.Parse(txtx2.Text), tly * float.Parse(txty2.Text),tlx * float.Parse(txtx3.Text), tly * float.Parse(txty3.Text), tlx *

float.Parse(txtx4.Text), tly * float.Parse(txty4.Text));

g.DrawString("A", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx1.Text), y0 - tly * float.Parse(txty1.Text));

g.DrawString("B", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx2.Text), y0 - tly * float.Parse(txty2.Text));

g.DrawString("C", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx3.Text), y0 - tly * float.Parse(txty3.Text));

g.DrawString("D", new Font("Times New Roman", 12), Brushes.Blue,x0 + tlx * float.Parse(txtx4.Text), y0 - tly * float.Parse(txty4.Text));

x11 = x1 = float.Parse(txtx1.Text);

x12 = x2 = float.Parse(txtx2.Text);

x13 = x3 = float.Parse(txtx3.Text);

x14 = x4 = float.Parse(txtx4.Text);

y11 = y1 = float.Parse(txty1.Text);

y12 = y2 = float.Parse(txty2.Text);

Trang 21

ghtrai = float.Parse(txtGioiHanTrai.Text);

ghphai = float.Parse(txtGioiHanPhai.Text);

ghtren = float.Parse(txtGioiHanTren.Text);

ghduoi = float.Parse(txtGioiHanDuoi.Text);

tlx = xmax / (ghtrai + ghphai);

tly = ymax / (ghtren + ghduoi);

Trang 22

ghtrai = float.Parse(txtGioiHanTrai.Text);

ghphai = float.Parse(txtGioiHanPhai.Text);

ghtren = float.Parse(txtGioiHanTren.Text);

ghduoi = float.Parse(txtGioiHanDuoi.Text);

tlx = xmax / (ghtrai + ghphai);

tly = ymax / (ghtren + ghduoi);

Trang 23

if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar)&&e.KeyChar!

=(Convert.ToChar("-"))&&e.KeyChar!=(Convert.ToChar(".")))

Trang 24

private void txtx4_KeyPress(object sender, KeyPressEventArgs e)

Trang 26

if (!Char.IsDigit(e.KeyChar) && !Char.IsControl(e.KeyChar) && e.KeyChar !=(Convert.ToChar("-")) && e.KeyChar != (Convert.ToChar(".")))

if (MessageBox.Show("Bạn chẳHc chẳHn muốHn thoát?", "Thống báo",

MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1) ==

float CosAlpha, SinAlpha,rads;

rads = (float)Math.PI/180;

MessageBox.Show("Xin nhập tọa độ 2 điểMm", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

Trang 27

g.DrawString("M'", new Font("Times New Roman", 12),

Brushes.Green, x0 + tlx * x1, y0 - tly * y1);

g.DrawString("N'", new Font("Times New Roman", 12),

Brushes.Green, x0 + tlx * (x1 + xT), y0 - tly * (y1 + yT));

g.DrawString("M'", new Font("Times New Roman", 12),

Brushes.Green, x0 + tlx * x1, y0 - tly * y1);

g.DrawString("N'", new Font("Times New Roman", 12),

Brushes.Green, x0 + tlx * (x1 + xT), y0 - tly * (y1 + yT));

g.DrawString("A'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * (x1 + xT), y0 - tly * (y1 + yT));

g.DrawString("B'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * (x2 + xT), y0 - tly * (y2 + yT));

g.DrawString("C'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * (x3 + xT), y0 - tly * (y3 + yT));

g.DrawString("D'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * (x4 + xT), y0 - tly * (y4 + yT));

g.DrawLine(Pens.Green, x0 + tlx * x1, y0 - tly * y1, x0 + tlx *(x1 + xT), y0 - tly * (y1 + yT));

g.DrawString("M'", new Font("Times New Roman", 12),

Brushes.Green, x0 + tlx * x1, y0 - tly * y1);

g.DrawString("N'", new Font("Times New Roman", 12),

Brushes.Green, x0 + tlx * (x1 + xT), y0 - tly * (y1 + yT));

MessageBox.Show("Xin nhập tọa độ và góc quay", "Error",

MessageBoxButtons.OK, MessageBoxIcon.Error);

Trang 28

CosAlpha = (float)Math.Cos(rads * double.Parse(txtAlpha.Text));

SinAlpha = (float)Math.Sin(rads * double.Parse(txtAlpha.Text));

if (cbxHinhVe.Text == "Hình tròn")

{

xq1 = (CosAlpha * (x1 - float.Parse(txtxM.Text)) - SinAlpha * (y1

- float.Parse(txtyM.Text))) + float.Parse(txtxM.Text);

yq1 = (SinAlpha * (x1 - float.Parse(txtxM.Text)) + CosAlpha * (y1

- float.Parse(txtyM.Text))) + float.Parse(txtyM.Text);

VeHinhTron(Pens.Red, tlx * xq1, tly * yq1, tly * r);

g.DrawString("I'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * xq1, y0 - tly * yq1);

g.DrawLine(Pens.Green, x0 + tlx * x1, y0 - tly * y1, x0 + tlx *

float.Parse(txtxM.Text), y0 - tly * float.Parse(txtyM.Text));

g.DrawLine(Pens.Green, x0 + tlx * xq1, y0 - tly * yq1, x0 + tlx *

float.Parse(txtxM.Text), y0 - tly * float.Parse(txtyM.Text));

g.DrawString(txtAlpha.Text + " độ", new Font("Times New Roman",14), Brushes.Red, x0 + tlx * float.Parse(txtxM.Text) - 20, y0 - tly *

float.Parse(txtyM.Text) - 20);

}

if (cbxHinhVe.Text == "Tam giác")

{

xq1 = (CosAlpha * (x1 - float.Parse(txtxM.Text)) - SinAlpha * (y1

- float.Parse(txtyM.Text))) + float.Parse(txtxM.Text);

yq1 = (SinAlpha * (x1 - float.Parse(txtxM.Text)) + CosAlpha * (y1

- float.Parse(txtyM.Text))) + float.Parse(txtyM.Text);

xq2 = (CosAlpha * (x2 - float.Parse(txtxM.Text)) - SinAlpha * (y2

- float.Parse(txtyM.Text))) + float.Parse(txtxM.Text);

yq2 = (SinAlpha * (x2 - float.Parse(txtxM.Text)) + CosAlpha * (y2

- float.Parse(txtyM.Text))) + float.Parse(txtyM.Text);

xq3 = (CosAlpha * (x3 - float.Parse(txtxM.Text)) - SinAlpha * (y3

- float.Parse(txtyM.Text))) + float.Parse(txtxM.Text);

yq3 = (SinAlpha * (x3 - float.Parse(txtxM.Text)) + CosAlpha * (y3

- float.Parse(txtyM.Text))) + float.Parse(txtyM.Text);

VeTamGiac(Pens.Red, tlx * xq1, tly * yq1, tlx * xq2, tly * yq2,tlx * xq3, tly * yq3);

g.DrawString("A'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * xq1, y0 - tly * yq1);

g.DrawString("B'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * xq2, y0 - tly * yq2);

g.DrawString("C'", new Font("Times New Roman", 12), Brushes.Red,x0 + tlx * xq3, y0 - tly * yq3);

g.DrawLine(Pens.Green, x0 + tlx * x1, y0 - tly * y1, x0 + tlx *

float.Parse(txtxM.Text), y0 - tly * float.Parse(txtyM.Text));

g.DrawLine(Pens.Green, x0 + tlx * xq1, y0 - tly * yq1, x0 + tlx *

Ngày đăng: 08/11/2014, 23:34

HÌNH ẢNH LIÊN QUAN

Hình 1. Tịnh tiến - Viết chương trình thực hiện các phép tịnh tiến, phép quay, phép co dãn, phép đối xứng qua điểm m(x0,y0), đối xứng qua đường thẳng và cho thực hiện từng chương trình tùy chọn
Hình 1. Tịnh tiến (Trang 5)
Hình 4. Phép đối xứng qua đường thẳng song song với Ox - Viết chương trình thực hiện các phép tịnh tiến, phép quay, phép co dãn, phép đối xứng qua điểm m(x0,y0), đối xứng qua đường thẳng và cho thực hiện từng chương trình tùy chọn
Hình 4. Phép đối xứng qua đường thẳng song song với Ox (Trang 7)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w