Przykład 6 Równanie poprawki dla kąta.
Projekt:
Obiekty mają zmienione następujące wartości cech:
Położenie i wielkość obiektów (w przybliżeniu) zgodnie z wyglądem w oknie programu
Cecha NAME: okno ma nazwę P6
Dodane przyciski mają nazwy odpowiednio - CZYTAJ_PRZ, UTWÓRZ_PRZ i ZAPISZ_PRZ
Przycisk ZAPISZ_PRZma cechę ENABLED wyłączoną (=FALSE)
a przycisk WSPÓŁCZYNNIKI_PRZ włączoną (zastępuje dotychczas wykonywane obliczenia przez przyciski: AZYMUT_PRZ, KAT_PRZ, DŁUGOŚĆ_PRZ i WSPÓŁCZYNNIKI_PRZ)
Dodajemy obiekty typu ComboBox (czyli lista rozwijana) - L_LST, C_LST i P_LST.
Zmiany koloru tła i koloru napisu, oraz zmiany czcionki według własnego uznania. Pozostałe cechy obiektów zachowują wartości początkowe.
Obliczenia azymutu przenosimy do FUNCTION AZYMUT (jest odpowiednio wywoływana dla obliczenia' z odpowiednimi parametrami, azymutu lewego i prawego).
Kod programu:
Wpisujemy kod oznaczony kolorem czarnym, pozostała część jest tworzona automatycznie przez VB.
` Kolor zielony (poprzedzony Apostrofem) oznacza tekst komentarza.
Zamieszczono nowe i zmienione procedury
Public Class p6
Dim xl, xc, xp, yl, yc, yp As Single
Dim azymut_l, azymut_p, kąt, długość_l, długość_p As Single
Dim dxl, dyl, dxp, dyp As Single
Dim al, ap, bl, bp As Single
Dim ro As Single = 200 / Math.PI
Dim grad, metr As Integer 'przeliczniki jednostek
Dim scieżka, t, tm, tg As String
Structure punkty
Dim nr As Integer
Dim x, y As Single
End Structure
Dim punkt() As punkty
Dim ile, lp As Integer ' ilość punktów, numer równania v
Private Sub koniec_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles koniec_prz.Click
FileClose()
End
End Sub
Private Sub wyczyść_prz_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles wyczyść_prz.Click
xl_txt.Text = "" : yl_txt.Text = ""
xc_txt.Text = "" : yc_txt.Text = ""
xp_txt.Text = "" : yp_txt.Text = ""
kąt_ety.Text =”" : długośćL_ety.Text = "" : długośćP_ety.Text = ""
AL_ety.Text = ”” : BL_ety.Text = "" : AP_ety.Text = "" : BP_ety.Text = "":
End Sub
Function azymut(ByVal dx As Single, ByVal dy As Single) As Single
If dx = 0 And dy > 0 Then
azymut = 100
ElseIf dx = 0 And dy < 0 Then
azymut = 300
ElseIf dx > 0 And dy = 0 Then
azymut = 0
ElseIf dx < 0 And dy = 0 Then
azymut = 200
ElseIf dx <> 0 And dy <> 0 Then
azymut = Math.Atan(dy / dx)
azymut = azymut * 200 / Math.PI
If azymut < 0 Then azymut = -azymut
If dx < 0 And dy > 0 Then azymut = 200 - azymut
If dx < 0 And dy < 0 Then azymut = 200 + azymut
If dx > 0 And dy < 0 Then azymut = 400 - azymut
End If
End Function
Private Sub współczynniki_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles współczynniki_prz.Click
If kontrola_danych() Then Exit Sub
xl = Val(xl_txt.Text) : xc = Val(xc_txt.Text)
xp = Val(xp_txt.Text) : yl = Val(yl_txt.Text)
yc = Val(yc_txt.Text) : yp = Val(yp_txt.Text)
dxl = xl - xc : dyl = yl - yc
azymut_l = azymut(dxl, dyl)
dxp = xp - xc : dyp = yp - yc
azymut_p = azymut(dxp, dyp): kąt = azymut_p - azymut_l
If kąt < 0 Then kąt = kąt + 400
kąt_ety.Text = Format(kąt * grad, tg): długość_l = (dxl ^ 2 + dyl ^ 2) ^ 0.5: długość_p = (dxp ^ 2 + dyp ^ 2) ^ 0.5
długośćL_ety.Text = Format(długość_l * metr, tm): długośćP_ety.Text = Format(długość_p * metr, tm)
al = dxl / długość_l ^ 2 * ro : AL_ety.Text = Format(al / metr, " 0.00000 ")
ap = dxp / długość_p ^ 2 * ro : AP_ety.Text = Format(ap / metr, " 0.00000 ")
bl = dyl / długość_l ^ 2 * ro ; BL_ety.Text = Format(bl / metr, " 0.00000 ")
bp = dyp / długość_p ^ 2 * ro ; BP_ety.Text = Format(bp / metr, " 0.00000 ")
End Sub
Private Sub metr_opc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles metr_opc.CheckedChanged
tg = " 0.0000 ": tm = " 0.000 "
grad = 1: metr = 1: ro = 200 / Math.PI
współczynniki_prz_Click(sender, e)
End Sub
Private Sub milimetr_opc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles milimetr_opc.CheckedChanged
tm = " 0 ": tg = " 0 "
grad = 10000: metr = 1000: ro = 2000000 / Math.PI
współczynniki_prz_Click(sender, e)
End Sub
Private Sub centymetr_opc_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles centymetr_opc.CheckedChanged
tm = " 0.0 ": tg = " 0 "
grad = 1000: metr = 100; ro = 2000000 / Math.PI
współczynniki_prz_Click(sender, e)
End Sub
Private Sub p6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
scieżka = "E:\md\foliogramy\vb.net\vb express\ćwiczenia nowe\ćw p4c\" ` wstawiamy własna ścieżkę do pliku „PUNKTY.TXT” - pobieramy plik
lp = 0: ile = 0 ` z katalogu prowadzącego „DLA STUDENTÓW”
End Sub
Private Sub L_lst_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles L_lst.SelectedIndexChanged
Dim numer, i As Integer
numer = L_lst.SelectedItem ' aktualnie wybrana wartość z listy dla punktów "Lewy" (numer punktu)
For i = 1 To ile
If punkt(i).nr = numer Then Exit For
Next ' znaleziony indeks w tabli punktów dla wybranego numeru
xl_txt.Text = punkt(i).x ' przekazanie współrzędnej X do odpowiedniego pola tekstowego
yl_txt.Text = punkt(i).y ' przekazanie współrzędnej Y do odpowiedniego pola tekstowego
End Sub
Private Sub C_lst_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles C_lst.SelectedIndexChanged
Dim numer, i As Integer
numer = C_lst.SelectedItem
For i = 1 To ile
If punkt(i).nr = numer Then Exit For
Next
xc_txt.Text = punkt(i).x: yc_txt.Text = punkt(i).y
End Sub
Private Sub P_lst_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles P_lst.SelectedIndexChanged
Dim numer, i As Integer
numer = P_lst.SelectedItem
For i = 1 To ile
If punkt(i).nr = numer Then Exit For
Next
xp_txt.Text = punkt(i).x: yp_txt.Text = punkt(i).y
End Sub
Private Sub Czytaj_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Czytaj_prz.Click
Dim i As Integer
FileOpen(1, scieżka + "punkty.txt", OpenMode.Input) ' otwarcie pliku tekstowego do odczytu
i = 0 : Input(1, t) : Input(1, t)
Do
If EOF(1) Then Exit Do
i += 1
ReDim Preserve punkt(i)
Input(1, punkt(i).nr) 'Wczytanie z pliku numeru punktu
Input(1, punkt(i).x) 'Wczytanie z pliku współrzędnej X punktu
Input(1, punkt(i).y) 'Wczytanie z pliku współrzędnej Y punktu
Loop
FileClose() 'Zamknięcie pliku
ile = i
Dim listaL, listaC, listaP As New ArrayList()
If ile = 0 Then
t = ("Lista jest pusta")
listaL.Add(t): listaP.Add(t); listaC.Add(t)
Else
For i = 1 To ile
listaL.Add(Str(punkt(i).nr))
listaP.Add(Str(punkt(i).nr))
listaC.Add(Str(punkt(i).nr))
Next i
End If
L_lst.DataSource = listaL
P_lst.DataSource = listaP
C_lst.DataSource = listaC
End Sub
Private Sub utwórz_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles utwórz_prz.Click
Zapisz_prz.Enabled = True
FileOpen(7, scieżka + "URP.txt", OpenMode.Output)
PrintLine(7, " Lista współczynników kierunkowych dla wybranych spostrzeżeń ")
Print(7, " punkt L punkt C punkt P ")
End Sub
Private Sub Zapisz_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Zapisz_prz.Click
lp += 1
Print(7, lp) ' Zapisanie do pliku numeru równania
PrintLine(7, Val(L_lst.SelectedItem), SPC(10), Val(C_lst.SelectedItem), Val(P_lst.SelectedItem))
Print(7, SPC(4), al, bl, -ap, -bp, (al - ap), (bl - bp))
PrintLine(7); PrintLine(7)
End Sub
End Class