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