Začínáme s ASP 10. díl: matematické funkce a barvy

Jak jsme si slíbili v minulém díle, budeme se dnes zabývat některými matematickými funkcemi.
V praxi možná asi všechny funkce nevyužijeme, ale pro úplnost bych si rád dovolil zmínit alespoň ty nejdůležitější. Abychom však nebyli příliš strozí a nezabývali se jen matematikou, řekneme si dnes něco o míchání barev. Bohužel slibovaného předávání parametrů v ASP se dnes nedočkáme, necháme to na příští část.

Abs – absolutní hodnota

Abs (číslo)

Funkce vrátí absolutní hodnotu argumentu, odřízne tedy případné znaménko. Pokud uvedeme v argumentu Null, funkce vrátí hodnotu 0.

Dim Ret
Ret = Abs(-1
25.9)  `Ret = 125.9
Ret = Abs(125.9)  `Ret = 125.9

Sgn – znaménko

Sgn (číslo)
Funkce vrací znaménko číselné hodnoty argumentu. Pokud je argument větší jak 0, vrátí 1. Pokud je menší než 0, pak –1. V případě, že je argument 0, pak vrátí 0.

Signum = Sgn(-125.9)  `Signum = -1
Signum = Sgn (125.9)  `Signum =  1
Signum = Sgn (0)      `Signum =  0

Round – zaokroouhení

Round (číslo,počet_des_míst)
Round
zaokrouhlí hodnotu prvního parametru na daný počet desetinných míst (druhý parametr).

Res0 = Round(1.9361,0)  `Res1 = 2
Res1 = Round(1.9361,1)  `Res1 = 1.9
Res2 = Round(1.9361,2)  `Res2 = 1.94
Res3 = Round(1.9361,3)  `Res3 = 1.936

Int a Fix – celá část

Int (číslo)
Fix (
číslo)
Funkce Int a Fix zaokrouhlují hodnotu prvního parametru na daný počet desetinných míst (druhý parametr). Rozdíl mezi těmito funkcemi poznáme u záporných čísel, kdy Int vrátí první celé číslo, které je menší než argument, zatímco Fix vrátí první celé číslo, které je větší. Příklad vše ozřejmí:

ResInt = Int(9.85)  `Res = 9
ResFix = Fix(9.85)  `Res = 9

ResInt = Int(-9.85)  `Res = -10
ResFix = Fix(-9.85)  `Res = -1

Pro zopakování goniometrických funkcí si uvedeme jen 3 základní:

Goniometrické funkce

Sin (úhel)
Cos (
úhel)
Tan (
úhel)
K těmto třem funkcím snad nemusíme nic dodávat, snad jen to, že argumenty jsou zadány v radiánech, nikoliv ve stupních. Pro převod využijeme známý konverzní vzorec, kdy stupně vynásobíme číslem pi/180. Pozorný čtenář se jistě podiví, proč potřebujeme v ASP sinus a cosinus? Na jednom nejmenovaném českém serveru má uživatel možnost po zadání svého data narození shlédnout svůj kondiciogram – když se podíváme pozorněji na běžný kondiciogram, je složen ze sinusoid. Příklad ke goniometrickým funkcím nebudeme ani uvádět.

Další dvě funkce jsou jen doplňkové, v ASP je opravdu stěží použijeme, i když :-)

Log – přirozený logaritmus

Log (číslo)
Funkce Log vrací hodnotu přirozeného logaritmu (základ e = 2.718282). Argument funkce musí být samozřejmě vyšší jak 0. Pro výpočet algoritmu na jiném základě (n) můžeme použít známou větu:

Logn(x) = Log(x) / Log(n)

Na příkladě si ukážeme funkci, která nám bude počítat dekadický logaritmus (využijeme předchozí větu):

Function Log10(x)
  Log10 = Log(x) / Log(10)
End Function

Response.write(Log10(1000))    ` vrátí 3

Exp – mocnina se základem e

Exp (číslo)
Funkce Exp vrací hodnotu ex . Parametr funkce nesmí převýšit hodnotu 709.7 – dojde tak k přetečení.

Response.write(Exp(0))    ` vrátí 1
Response.write(Exp(1))    ` vrátí e = 2.71828182845905

Když jsme se zmínili o mocninách, měli bychom si říci něco o funkci Sqrt

Sqrt (číslo)
Funkce Sqrt nepodporuje komplexní čísla, proto bychom se měli vyvarovat záporných čísel v parametru. Uvedení příkladu se mi zdá zbytečné.

Nyní se však od teoretické šedé matematiky přesuňme k matematice aplikované.

Převody soustav a barvy

Hex (číslo)
Oct (
číslo)
Funkce Hex vrací hodnotu parametru v šestnáctkové soustavě, funkce Oct v soustavě osmičkové. Pokud je argument Null, funkce vrací opět Null.

Response.write(Hex(10))    ` vrátí A
Response.write(Hex(255))    ` vrátí FF

Response.write(Oct(8))      ` vrátí 10
Response.write(Oct(64))    ` vrátí 100

Pro zápis nedekadických čísel můžeme použít následující zápis – prefix &h nám definuje, že se jedná o hexadecimální číslo, podobně můžeme použít i zápis osmičkové soustavy, tedy prefix &o. Příklad:

Response.write(&o10)        ` vypíše 8
Response.write(&o100)      ` vypíše 64

Response.write(&h0000FF)    ` vypíše 255      -hodnota pro červenou (red)
Response.write(&hFF0000)    ` vypíše 16711680 -hodnota pro modrou  (blue)

Zdánlivě nepotřebnou funkci Hex jistě uvítáme, pokud budeme pracovat s barvami, resp. je budeme míchat. Barevná paleta je vždy uváděna v kódu &hRRGGBB. Nyní se podívejme na stěžejní funkci pro práci s barvami – RGB.

RGB (červená, zelená, modrá)
Funkce RGB vrací číslo, které reprezentuje barvu složenou z definovaných barvených složek. Hodnoty složek se zadávají v rozmezí 0…255, tedy například RGB(255,0,0) vrátí hodnotu 16776960. V případě, že zadáme hodnotu převyšující 255, použije se 255. Na malém případě si předvedeme použití RGB v praxi. Příklad vykreslí celé barevné spektrum.

<HTML><HEAD>
<TITLE>Serial ASP na Zive.cz 10 - barvy RGB</TITLE></HEAD>
<BODY> 
<table cellspacing="0" cellpadding="0" border="0">
<tr>
<%

Function CompleteRGB(r,g,b)
  color = Cstr(Hex(RGB(r,g,b)))
  if len(color)=1 then  CompleteRGB= "#00000" & color
  if len(color)=2 then  CompleteRGB= "#0000" & color
  if len(color)=3 then  CompleteRGB= "#000" & color
  if len(color)=4 then  CompleteRGB= "#00" & color
  if len(color)=5 then  CompleteRGB= "#0" & color
  if len(color)=6 then  CompleteRGB= "#" & color
End Function

Sub Phase(r0,g0,b0,r1,g1,b1,what,st)

if what="r" then
  for r=r0 to r1 step st
  response.write("<td width=3 height=20 bgcolor=" & CompleteRGB(r,g0,b0) & "></td>")
  next
end if

if what="g" then
  for g=g0 to g1 step st
  response.write("<td width=3 height=20 bgcolor=" & CompleteRGB(r0,g,b0) & "></td>")
  next
end if

if what="b" then
  for b=b0 to b1 step st
  response.write("<td width=3 height=20 bgcolor=" & CompleteRGB(r0,g0,b) &  "></td>")
  next
end if

response.write(vbCrLf)
End Sub

Call Phase(000,000,250,  250,000,250,"r",+10)
Call Phase(250,000,250,  250,000,000,"b",-10)
Call Phase(250,000,000,  250,250,000,"g",+10)
Call Phase(250,250,000,  000,250,000,"r",-10)
Call Phase(000,250,000,  000,250,250,"b",+10)
Call Phase(000,250,250,  000,000,250,"g",-10)

%>
</tr>
</table>


Jak tedy náš příklad pracuje? Předně jsem si zjistil, jak barevné spektrum vypadá – dělí se na 6 fází, kde se postupně střídají R, G a B složky. Dvě z nich jsou vždy konstanty a zbylé se zvyšují, resp. snižují. Poté již stačilo vytvořit funkci, která vykreslí danou fázi. Předávám jí celkem 8 parametrů, v prvních třech je to startovní RGB, další tři jsou RBG konečné, pak je to řetězcový parametr, určující, která složka se má měnit, a poslední parametr je krok, o kolik se má složka posunout. Na doplnění dlužím vysvětlit jednu funkci, na kterou nesmíme zapomenout. Je jí funkce Cstr, jež převádí číselnou hodnotu na hodnotu řetězcovou. Museli jsme ji použít, neboť metoda Response.write podporuje výlučně textové parametry.

V příští části si určitě musíme vyčlenit čas na slibované předávání parametrů, sloučíme si to s vysvětlením funkcí pro zpracování datumu a času. Třeba si uděláme onen kondiciogram – uvidíme ;-)

Témata článku: Software, Programování, Barvy, Code, Phase, Fixy, Call, Expo, What, What If, Step, Next, Sinus, FF

13 komentářů

Nejnovější komentáře

  • asdf 28. 1. 2003 19:21:24
    co dela String?
  • Tomáš Kokoška 29. 5. 2001 8:46:47

    Myslím, že ideální kód není ani použití WHILE ... LOOP, protože celý...

  • Jaroslav Lhotak 24. 5. 2001 14:57:55
    Ano do jiste miry souhlasim, nicmene vzdy zalezi na forme, ktera se zvoli....
Určitě si přečtěte

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

Operační systém běžným počítačům nedal Bill Gates, ale Gary Kildall

** Gary Kildall pochopil, že levné výpočetní čipy mohou posloužit jako univerzální počítače pro všechny ** Připravil pro ně proto první operační systém ** Později mu systém vyfoukl Microsoft a nazval ho MS DOS

Včera | Pavel Tronner | 45

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

Původní Starcraft: Brood War je nyní zdarma. Konec práce! Jde se pařit

** Legendární hra Starcraft je nyní k dispozici zdarma ** Chystá se i nová remasterovaná verze s hezčí grafikou

19.  4.  2017 | Jakub Čížek | 25

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

Brno otevřelo největší českou dílnu pro bastlíře. Kladívka, vrtačky, 3D tiskárny, laserové řezačky. Je tu vše

** Máte nápad, ale chybí vám stroje a pořádná dílna? ** Chcete postavit ptačí budku, nebo krabičku pro Arduino? ** Brno otevřelo svůj FabLab – laboratoř pro bastlíře

19.  4.  2017 | Jakub Čížek | 31

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

Před 35 lety měl premiéru legendární počítač ZX Spectrum. Připomeňte si „Gumáka“

** Slavný osmibitový počítač Sinclair ZX Spectrum byl uveden právě před 35 lety ** Připomeňte si tento průkopnický počítač v tematických článcích ** Podívejte se, jak funguje dnes

Včera | Pavel Tronner | 12

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

Umělá inteligence je sice v plenkách, už teď ale přestáváme rozumět, jak vlastně funguje. To je problém

** Už je to tady, lidé přestávají chápat počítače ** Systémy neuronových sítí začínají pracovat tak, že ani jejich tvůrci přesně neví, co se uvnitř děje ** Do budoucna to může být závažný problém

Dnes | Jakub Čížek | 82


Aktuální číslo časopisu Computer

První test AMD Ryzen

Velké testy: 22 powerbank a 8 bezdrátových setů

Radíme s koupí Wi-Fi routeru

Co dokáží inteligentní domy?