Diễn đàn IT


 
Trang ChínhGalleryLatest imagesTìm kiếmĐăng kýĐăng Nhập
:: Forum IT - WE ARE IT ::
  • Music

 

 Tìm hiểu khả năng đồ họa của VB.NET

Go down 
Tác giảThông điệp
Admin
Admin
Admin


Tổng số bài gửi : 28
Join date : 10/08/2011
Age : 33

Tìm hiểu khả năng đồ họa của VB.NET Empty
Bài gửiTiêu đề: Tìm hiểu khả năng đồ họa của VB.NET   Tìm hiểu khả năng đồ họa của VB.NET Icon_minitimeThu Aug 11, 2011 9:04 pm

Bài này là một ví dụ hoàn chỉnh nhằm kết
thúc loạt bài tìm hiểu khả năng đồ họa của VB.NET. Ví dụ
xoay quanh việc vẽ đường biểu diễn các hàm lượng giác
Sine
, CosineTangent.

Trước khi bắt tay vào thiết kế ví dụ, bạn
hãy quan sát hình 1 (biểu diễn hàm Sine), hình 2
(biểu diễn hàm Cosine) và hình 3 (biểu diễn hàm
Tangent).


Tìm hiểu khả năng đồ họa của VB.NET Vb1
Hình 1


Tìm hiểu khả năng đồ họa của VB.NET Vb2
Hình 2


Tìm hiểu khả năng đồ họa của VB.NET Vb3
Hình 3

Đường biểu diễn đồ thị có màu xanh dương,
đường kẻ màu đỏ là đường biểu diễn trục hoành trên mặt
phẳng tọa độ (chia hình chữ nhật làm 2 phần bằng nhau).
Đồ thị là một đường cong đi qua nhiều điểm (ngay cả nét
thẳng đứng trong đồ thị của hàm Tangent cũng là
một đường cong đi qua các điểm xếp thẳng hàng với nhau
mà thôi).

Ý tưởng của ví dụ này là: sử dụng hành vi
DrawCurve để vẽ đường cong đi qua 360
điểm
(tương ứng với 360 độ) trên mặt phẳng tọa độ.
Tọa độ Y của mỗi điểm được tính nhờ các phép tính kết
hợp với hành vi Sin, Cos
Tan có sẵn thuộc lớp Math
(tương ứng với các hàm lượng giác trong VB6).

Bạn hãy nạp VB.NET 2005 và tạo một ứng dụng
mới có templateWindows Application.
Trên form trống có sẵn, vẽ một Panel
control
làm nơi vẽ đồ thị, đặt tên là
pnlNoiVeDuongBieuDien
. Kích thước của control này
không ảnh hưởng đến kết quả vẽ. Vẽ tiếp 3 Button
control
lần lượt có tên là cmdSine,
cmdCosine
cmdTangent.

Gõ đoạn mã sau đây vào form:



Imports

System.Drawing.Drawing2D




Imports

System.Math




Public

Class
VeDuongBieuDienHamLuongGiac




Dim
CacDiemTrenDoThi(359) As
PointF, BienDem
As
Integer




Dim KhoangChiaDo
As
Double, ViTriTrucHoanh
As
Double




Dim gNoiVe
As Graphics




Dim pDuongBieuDien
As Pen =
New Pen(Color.Blue, 2)




Dim pTrucHoanh
As Pen =
New Pen(Color.Red, 1)




Private
Sub
VeDuongBieuDienHamLuongGiac_Load
(ByVal
sender As _




System.Object, ByVal e As System.EventArgs) _




Handles
MyBase.Load




KhoangChiaDo = pnlNoiVeDuongBieuDien.Width / 360




ViTriTrucHoanh = CInt(pnlNoiVeDuongBieuDien.Height
/ 2 - 1)




pTrucHoanh.DashStyle = DashStyle.Dash

‘Nét ngắt quãng



gNoiVe = pnlNoiVeDuongBieuDien.CreateGraphics




gNoiVe.SmoothingMode = SmoothingMode.HighQuality
‘Nét vẽ mượt mà



End
Sub




Private
Sub cmdSine_Click(ByVal
sender As System.Object,
_




ByVal e
As System.EventArgs)
Handles cmdSine.Click




For BienDem = 0
To 359




CacDiemTrenDoThi(BienDem) =
New _




Point(Round(BienDem * KhoangChiaDo), _




ViTriTrucHoanh - ViTriTrucHoanh * Sin(PI
* BienDem / 180))




Next




Call
VeDuongBieuDien("Sine")




End
Sub




Private
Sub cmdCosine_Click(ByVal sender As System.Object, _




ByVal e
As System.EventArgs)
Handles cmdCosine.Click




For BienDem = 0
To 359




CacDiemTrenDoThi(BienDem) =
New _




Point(Round(BienDem * KhoangChiaDo), _




ViTriTrucHoanh - ViTriTrucHoanh * Cos(PI
* BienDem / 180))




Next




Call
VeDuongBieuDien("Cosine")




End
Sub




Private
Sub cmdTangent_Click(ByVal
sender As System.Object,
_




ByVal e
As System.EventArgs)
Handles cmdTangent.Click




Dim myTan
As
Double




For BienDem = 0
To 359




Try




myTan = Tan(PI * BienDem / 180) * 4




CacDiemTrenDoThi(BienDem) =
New _




Point(Round(BienDem * KhoangChiaDo), _




ViTriTrucHoanh - myTan)




Catch




If Tan(PI *
BienDem / 180) * 4 > ViTriTrucHoanh
Then




CacDiemTrenDoThi(BienDem) =
New _




Point(Round(BienDem * KhoangChiaDo), _




pnlNoiVeDuongBieuDien.Height)




Else




CacDiemTrenDoThi(BienDem) =
New _




Point(Round(BienDem * KhoangChiaDo), 0)




End
If




End
Try




Next




Call
VeDuongBieuDien("Tangent")




End
Sub




Sub VeDuongBieuDien(ByVal
sTenHam As
String)




With gNoiVe




.Clear(pnlNoiVeDuongBieuDien.BackColor)




.DrawString(sTenHam, New
Font("Times New Roman",
14), _




New
SolidBrush(Color.Green), 120, 20)




.DrawLine(pTrucHoanh, 0,
CInt
(ViTriTrucHoanh), _




pnlNoiVeDuongBieuDien.Width,
CInt(ViTriTrucHoanh))




.DrawCurve(pDuongBieuDien, CacDiemTrenDoThi)




End
With




End
Sub




End

Class


Nhận xét:

• Với GDI+, hệ thống tọa độ có gốc là góc
trên bên trái của Panel control, nên tọa độ Y có
trị số càng lớn nếu điểm càng thấp. Do ta sử dụng trục
hoành là đường kẻ màu đỏ (vẽ tại ViTriTrucHoanh) chia
Panel control
làm 2 phần, phần trên thể hiện các
điểm có tọa độ Y dương, còn phần dưới thể hiện các điểm
có tọa độ Y âm. Vì thế, phép trừ giá trị từ
ViTriTrucHoanh làm cho đường cong chuyển lên đối với các
giá trị dương, chuyển xuống đối với các giá trị âm.

• Vì tham số của các hành vi Sin,
CosTanradian,
nên trong công thức phải nhân với PI / 180
để chuyển độ thành radian.

• Giá trị của Tan(90) và Tan(270) là không
xác định, nên lỗi overflow (tràn số) sẽ làm ngưng
chương trình. Do vậy, khác với cách tính tọa độ các điểm
nằm trên đồ thị hàm SineCosine,
ta đặt đoạn mã tính tọa độ các điểm nằm trên đồ thị hàm
Tangent bên trong một cấu trúc Try …
Catch
. Tọa độ vẫn được tính theo đoạn mã nằm
giữa TryCatch, nếu có
lỗi xảy ra (gọi là trường hợp ngoại lệ) thì tính lại tọa
độ theo đoạn mã nằm giữa Catch
End Try
(theo đó các điểm ở đỉnh và đáy của
Panel control
được sử dụng để thay thế). Con số 4
trong phép tính chỉ làm cho đồ thị đẹp hơn thôi, bạn hãy
thử đổi số 4 thành 1, 2 hoặc 3 thì sẽ thấy.
Về Đầu Trang Go down
https://cntt08.forumvi.net
 
Tìm hiểu khả năng đồ họa của VB.NET
Về Đầu Trang 
Trang 1 trong tổng số 1 trang

Permissions in this forum:Bạn không có quyền trả lời bài viết
Diễn đàn IT :: Góc IT :: Học tập-
Chuyển đến