12.2 Vykreslování grafů funkcí
12.3 Logické operátory
12.4 Ručičkové hodiny
12.5 Digitální hodiny
12.6 Domácí úkol
12.7 V další lekci...
12.1 Matematické funkce
Ano, ano, tak s těmi se budeme ještě dlouho setkávat. Já osobně je využívám neustále, protože Visual Basic používám převážně pro simulaci elektronických odvodů. Tak se do nich pustíme. Nejlépe když vám hned ukážu tabulku s jejich výčtem:
Abs - Absolutní hodnota
Atn - Arcustangens
Cos - Cosinus
Exp - Funkce vracející základ logaritmu
Fix - Zaokrouhlení (vždy dolů)
Int - Zaokrouhlení (vždy dolů)
Log - Logaritmus
Rnd - Náhodné číslo od 0 do 0,999
Round - Normální zaokrouhlení
Sgn - Vrací znaménku plus nebo minus jedna
Sin - Sinus
Sqr - Odmocnina
Tan - Tangens
Využití funkce v kódu.
Print Abs(-32)
Print Cos(2.15)
Print Sin(x – abs(f))
Print Sqr(tan(17)+Log(x))
Všechny tyto funkce se zapisují stejným stylem, pouze u Rnd() se v závorkách nic neuvádí, ani závorky se uvádět nemusí.
12.2 Vykreslování grafů funkcí
Zde si ukážeme praktické využití toho, co jsem rychle shrnul výše. Na formulář si budeme vykreslovat grafy jednotlivých funkcí. Každý graf budeme počítat od 0 do dvou pí. Grafy různých funkcí budeme vykreslovat pomocí metody PSet. Začneme tedy metodou PSet ScaleMode. Formulář nastavíme na Pixely. Nesmíme zapomenout ještě na jednu věc: formulář má souřadnice, které čím jsou větší, tím se bod zakresluje více dolů, pokud ale pracujeme v matematice, tak se vyšší hodnoty zakreslují nahoru, proto je potřeba si to obrátit. Ukázka je v následujícím kódu:
Sinus:
Const pi = 3.14
Private Sub Form_Click()
For i = 0 To 2 * pi Step 0.001
x = i * 100
y = 380 - (360 * Sin(i))
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Cosinus:
Const pi = 3.14
Private Sub Form_Click()
For i = 0 To 2 * pi Step 0.001
x = i * 100
y = 380 - (360 * Cos(i))
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Tangens:
Const pi = 3.14
Private Sub Form_Click()
For i = 0 To 2 * pi Step 0.001
x = i * 100
y = 380 - (36 * Tan(i))
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Logaritmus:
Const pi = 3.14
Private Sub Form_Click()
For i = 1 To 720 Step 1
x = i
y = 380 - (10 * Log(i))
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Odmocnina
Const pi = 3.14
Private Sub Form_Click()
For i = 1 To 720 Step 1
x = i
y = 380 - (10 * Sqr(i))
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Neměl bych zapomínat ani na mocninu, ta se dělá pomocí ^ téhle stříšky, když tedy chci napsat pět na třetí, tak napíšu 5^3. Jak jednoduché.
Const pi = 3.14
Private Sub Form_Click()
For i = 1 To 720 Step 0.01
x = i * 5
y = 380 - (i ^ 2)
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
To bylo na druhou a teď na třetí :)
Const pi = 3.14
Private Sub Form_Click()
For i = 1 To 300 Step 0.01
x = i * 20
y = 380 - (i ^ 3)
PSet (x, y), &HFF
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Ještě jednu drobnost, jak vykreslit kružnici nebo ovál pomocí těchto metod:
Const pi = 3.14
Private Sub Form_Click()
For i = 0 To 2 * pi Step 0.01
x = 380 + (160 * Sin(i))
y = 380 - (160 * Cos(i))
PSet (x, y), &HFF
DoEvents
Next i
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
To byl kruh a tady je slíbený ovál:
Const pi = 3.14
Private Sub Form_Click()
For i = 0 To 2 * pi Step 0.01
x = 380 + (260 * Sin(i))
Y = 380 - (160 * Cos(i))
PSet (x, Y), &HFF
DoEvents
Next i<
End Sub
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Form1.Line (0, 380)-(800, 380)
End Sub
Tím bych zakončil funkce. Pokud jste pochopili funkce a stále vám to nejde, je to jen matematikou musíte vědět, jak s jakou funkcí počítat.
12.3 Logické operátory
Po matice trochu logiky, probereme si logické operátory ve Visual Basicu. Opět začnu tabulkou s jejich výčtem:
And - Logický součin
Or - Logický součet
Xor - Ekvivalence
Not - Negace
Imp - Implikace
Logický součin And: Pokud jsou oba výrazy rovny True, pak je výsledný výraz roven True, jinak je výsledný výraz False ("a" a "b" berme jako vstupní hodnoty a "c" jako výstupní hodnotu, čili výsledek).
a b c
0 0 0
0 1 0
1 0 0
1 1 1
Logický součet Or: Pokud je alespoň jeden výraz roven True, pak je výsledný výraz roven True, jinak je False.
a b c
0 0 0
0 1 1
1 0 1
1 1 1
Ekvivalence Xor: Pokud jsou dva výrazy rozdílné, výsledný výraz je True, jinak je False.
a b c
0 0 0
0 1 1
1 0 1
1 1 0
Negace Not: Pokud je výraz roven True, pak je výsledný výraz False a opačně.
a c
1 0
0 1
Implikace Imp ???
a b c
0 0 1
0 1 1
1 0 0
1 1 1
Tyto funkce využijete například v logických operacích a výpočtech. Ještě vám ukážu, jak se s nimi pracuje a jak se zapisují do kódu:
Dim a As Boolean
Dim b As Boolean
Dim c As Boolean
c = a And b
c = a Or b
c = a Xor b
c = a Imp b
c = Not a
Pokud pracujete s hodnotami True a False, doporučuji deklarovat proměnné, vyhnete se tak nepříjemným problémům. Většímu využití logických funkcí se budeme zabývat v lekcích, které nás čekají za několik týdnů.
12.4 Ručičkové hodiny
Ukázka matematických funkcí aneb jak mohou vypadat ručičkové hodiny. Je potřeba si na formulář vložit tři objekty Line a jeden Timer.
Const pi = 3.14
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Timer1.Interval = 1000
With Line1
.X1 = 200
.X2 = 200
.Y1 = 200
.Y2 = 200
.BorderColor = &HFF
.BorderWidth = 1
End With
With Line2
.X1 = 200
.X2 = 200
.Y1 = 200
.Y2 = 200
.BorderColor = &H0
.BorderWidth = 2
End With
With Line3
.X1 = 200
.X2 = 200
.Y1 = 200
.Y2 = 200
.BorderColor = &H0
.BorderWidth = 4
End With
End Sub
Private Sub Timer1_Timer()
Hodinovka = Hour(Time)
Minutovka = Minute(Time)
Vterinovka = Second(Time)
Hodinovka = (Hodinovka / 12) * 2 * pi
Minutovka = (Minutovka / 60) * 2 * pi
Vterinovka = (Vterinovka / 60) * 2 * pi
With Line3
.X2 = 200 + (100 * Cos(Hodinovka - 1.57))
.Y2 = 200 + (100 * Sin(Hodinovka - 1.57))
End With
With Line2
.X2 = 200 + (120 * Cos(Minutovka - 1.57))
.Y2 = 200 + (120 * Sin(Minutovka - 1.57))
End With<
With Line1
.X2 = 200 + (150 * Cos(Vterinovka - 1.57))
.Y2 = 200 + (150 * Sin(Vterinovka - 1.57))
End With
End Sub
Naše hodiny ale mohou pracovat i takto, zde nejsou potřeba tři objekty Line.
Const pi = 3.14
Private Sub Form_Load()
Form1.ScaleMode = 3
Form1.AutoRedraw = True
Timer1.Interval = 100
End Sub
Private Sub Timer1_Timer()
Hodinovka = Hour(Time)
Minutovka = Minute(Time)
Vterinovka = Second(Time)
Hodinovka = (Hodinovka / 12) * 2 * pi
Minutovka = (Minutovka / 60) * 2 * pi
Vterinovka = (Vterinovka / 60) * 2 * pi
Cls
Form1.DrawWidth = 4
Line (200, 200)-(200 + (100 * Cos(Hodinovka - 1.57)), _
200 + (100 * Sin(Hodinovka - 1.57))), &H0
Form1.DrawWidth = 2
Line (200, 200)-(200 + (120 * Cos(Minutovka - 1.57)), _
200 + (120 * Sin(Minutovka - 1.57))), &H0
Form1.DrawWidth = 1
Line (200, 200)-(200 + (150 * Cos(Vterinovka - 1.57)), _
200 + (150 * Sin(Vterinovka - 1.57))), &HFF
End Sub
12.5 Digitální hodiny
Buďto si můžeme vytvořit hodiny jako segmentový display pomocí objektů Line, což ale znamená mnoho podmínek a mnoho kódů, nebo pomocí obrázků, což je jednodušší. K segmentovým displejům se vrátíme při tvorbě komponent ActiveX.
12.6 Domácí úkol
Tentokrát to nebude ani moc úkol a ani ho po vás nechci odevzdat, jen si prostě vyzkoušejte, co ony funkce umí a jak s nimi pracovat a jak jich využít při kreslení grafu. Třeba si zkuste převést sinusový průběh na průběh obdélníkový. Pokud si troufnete na trojúhelníkový průběh, je jen na vás, co s tím uděláte.
12.7 V další lekci...
Ukládání a načítání textových souborů, minimalizace a tlačítka na titulku okna, tvorba falešného FullScreenu a možnosti formuláře Focus.