× Aktuálně z oboru

Vychází Game Ready ovladače pro Far Cry 5 [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]
Celá zprávička [ clanek/2018040603-vychazi-game-ready-ovladace-pro-far-cry-5/ ]

VB - 12. lekce

[ http://programujte.com/profil/27-jiri-chytil/ ]Google [ ?rel=author ]       [ http://programujte.com/profil/20356-kubec-milan-a-vera/ ]Google [ ?rel=author ]       30. 4. 2005       19 498×

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.


Článek stažen z webu Programujte.com [ http://programujte.com/clanek/2005043001-vb-12-lekce/ ].