-
Notifications
You must be signed in to change notification settings - Fork 27
Kuvaympäristö
Esimerkiksi kuvaajat ja lukusuorat voidaan piirtää kuva-ympäristön avulla. Ympäristön sisään kirjoitetaan Python-koodi joka generoi kuvan. Yksinkertaisin tapa lisätä kuva on
\begin{kuva}
KOODI
\end{kuva}
Kuva-ympäristöä ei voida laittaa joidenkin ympäristöjen sisään, jolloin täytyy ensin määritellä kuva päätasolla
\begin{luoKuva}{NIMI}
KOODI
\end{luoKuva}
ja sitten näyttää kuva lisäämällä koodi
\naytaKuva{NIMI}
kuvan sijoituskohtaan. Kuvan nimiä voi käyttää uudelleen, luoKuva aina ylikirjoittaa vanhan.
Tavallisesti kuvissa tarvittava Python-koodi on sarja funktiokutsuja, jokainen omalla rivillään. Funktiokutsu on muotoa FUNKTIO(PARAMETRIT), missä PARAMETRIT on pilkulla erotettu lista funktion parametrien arvoja. Osalla funktion parametreista voi olla oletusarvoja, jolloin niitä ei tarvitse erikseen ilmoittaa. Esimerkiksi jos funktiolla f on parametrit a, b ja c joista b:llä on oletusarvo 1 ja c:llä oletusarvo 2, niin funktiokutsu f(100, c = 300) tarkoittaa parametrien arvoja a = 100, b = 1, c = 300.
Jos Python-koodissa on virhe, käännössä tulee yleensä virhe
! LaTeX Error: File `kuva-tmp-output.txt' not found.
Tällöin Python-virheilmoitus on heti tämän yläpuolella.
Pythonissa merkkijonot kirjoitetaan lainausmerkkien "" sisään. Kenoviivoilla on merkkijonojen sisällä erikoismerkitys, joten jos tarvitset kenoviivoja merkkijonon sisällä, täytyy kirjoittaa pieni r lainausmerkkejä ennen, jolloin Python pitää merkkijonoa "raakana". Siis esimerkiksi r"$\pi$"
.
Kuvissa voi tietenkin käyttää Pythonia muutenkin, mutta kannattaa tehdä sellaista että toimii sekä Python 2:lla että Python 3:
- funktio piste: Piirtää pisteen haluttuun kohtaan. Toimii myös kuvaajapohjassa.
- parametri P: Pisteen sijainti.
- parametri nimi: Pisteen viereen merkittävä nimi. (oletusarvo "")
- parametri suunta: Nimen merkitsemissuunta, muotoa (x-suunta, y-suunta). (oletusarvo (1, 0))
ESIM: Pisteen piirtäminen kohtaan (5, 3):
\begin{kuva}
piste((5, 3))
\end{kuva}
ESIM: Pisteen piirtäminen kohtaan (3, 1), nimellä "A" joka merkitään vasemmalle alas
\begin{kuva}
piste((3, 1), "A", (-1, -1))
\end{kuva}
- funktio kuvaaja.pohja: Luo kuvaajapohjan ja muuttaa piirtotilan piirtämään sen sisään.
- parametrit minX, maxX, minY, maxY: X- ja Y-akselien ala- ja ylärajat. Täytyy päteä minX <= 0 <= maxX ja minY <= 0 <= maxY
- parametrit leveys, korkeus: Kuvaajapohjan leveys ja korkeus. Mikäli molemmat jätetään tyhjäksi, kokona käytetään (maxX - minX) x (maxY - minY). Mikäli vain toinen jätetään tyhjäksi, se päätellään toisesta niin että kuvaajasta tulee isometrinen.
- parametrit nimiX, nimiY: X- ja Y-akselien nimet LaTeX-koodina. (oletusarvot "")
- parametri ruudukko: Piirretäänkö kuvaajapohjaan ruudukko. (oletusarvo: True)
Kuvaajapohja yrittää tehdä jotenkin järkevän näköisen ruudukon taustalle, mutta se voi yhä joissain tapauksissa näyttää huonolta, yritetään parantaa...
- funktio kuvaaja.piirra: Piirtää annetun funktion (y = f(x)) kuvaajan. Ei vaadi välttämättä kuvaajapohjaa.
- parametri f: Piirrettävä x:n funktio, esim "x**2" tai "cos(x)" (Python-koodia merkkijonossa).
- parametrit a ja b: X-koordinaattien väli [a, b]. Jos jompikumpi otetaan pois, käytetään nykyisiä X-rajoja, jotka alustetaan esimerkiksi kuvaaja.pohjassa automaattisesti.
- parametri nimi: Funktion yhteyteen merkittävä nimi LaTeX-koodina. (oletusarvo: "")
- parametri kohta: Funktion kohta johon nimi merkitään. Jos jätetään tyhjäksi, nimi merkitään funktion viimeiseen piirrettyyn kohtaan. Jos luku x, nimi merkitään kohtaan (x, f(x)). Jos pari (x, y), nimi merkitään kohtaan (x, y).
- parametri suunta: Mihin suuntaan nimi laitetaan. Toimii samalla tavalla kuin funktion 'piste' suunta-parametri. (oletusarvo: (1, 0))
ESIM: kuvaajapohja alueelle [-1, 4] x [-2, 3] johon piirretään nimetty funktion x^2-2 kuvaaja.
\begin{kuva}
kuvaaja.pohja(-1, 4, -2, 3)
kuvaaja.piirra("x**2-2", nimi = "$x^2 - 2$")
\end{kuva}
ESIM: isometrinen kuvaajapohja alueelle [-1, 1] x [-1, 1] ilman ruudukkoa jossa x:ksi ja y:ksi nimetyt akselit, ja sen päälle kuvaajat x^3-1/2:sta välillä [0.2, 0.95] johon nimi kohtaan 0.6 ylävasemmalle ja sen päälle normaalisti nimetty funktion x kuvaaja
\begin{kuva}
kuvaaja.pohja(-1, 1, -1, 1, korkeus = 8, nimiX = "$x$", nimiY = "$y$", ruudukko = False)
kuvaaja.piirra("x**3-0.5", a = 0.2, b = 0.95, nimi = "$x^3-1/2$", kohta = 0.6, suunta = (-1, 1))
kuvaaja.piirra("x", nimi = "$x$")
\end{kuva}
Lukusuora-moduulin avulla voi piirtää yhden tai useamman lukusuoran joihin voi merkitä pisteitä ja välejä, hahmotella kuvaajia ja joiden välille voi vetää nuolia.
- funktio lukusuora.pohja: Piirtää lukusuorapohjan, eli annetun määrän lukusuoria.
- parametrit a ja b: Lukusuoran näytettävän osan alku- ja loppupiste.
- parametri leveys: Lukusuoran leveys (cm). (oletusarvo: b - a)
- parametri nimi: Jokaiselle akselille annettava nimi. (oletusarvo: "")
- parametri n: Lukusuorien lukumäärä. (oletusarvo: 1)
- parametri varaa_tila: Varataanko lukusuoralle kaikki käytettävissä oleva tila (True) vai vaan niin paljon kun tarvitaan (False). (oletusarvo: True)
- funktio lukusuora.piste / lukusuora.kohta: Piirtää pisteen (pisteenä/pystyviivana) lukusuoralle.
- parametri X: Kohta lukusuoralla johon merkki laitetaan.
- parametri nimi: Merkki yläpuolelle merkittävä nimi. (oletusarvo: "")
- parametri i: Monenteenko lukusuoraan merkki laitetaan. Jos 0, merkitään kaikkiin lukusuoriin. (oletusarvo: 0)
- funktio lukusuora.vali: Piirtää lukusuoralle välin.
- parametrit a ja b: Välin alku- ja loppupisteet. Arvo None tarkoittaa, että väli on rajoittamaton. (oletusarvot: None)
- parametrit a_kuuluu ja b_kuuluu: Kuuluvatko alku- tai loppupisteet väliin. (oletusarvot: False, siis avoin väli)
- parametrit a_nimi ja b_nimi: Alku- ja loppupisteiden päälle merkittävät nimet. (oletusarvot: "")
- parametri i: Lukusuora, jolle väli piirretään. (oletusarvo: 1)
- funktio lukusuora.nuoli: Piirtää lukusuorien välille nuolen.
- parametrit a ja b: Nuolen alku- ja loppu-X-koordinaatit.
- parametrit a_i ja b_i: Mille lukusuorille nuolen alku ja loppu menevät. (oletusarvot: 1)
ESIM: Piirretään 8cm leveälle lukusuoralle välistä [0, 10] avoin väli [a, b[ missä a piirretään kohtaan 2 ja b kohtaan 10.
\begin{kuva}
lukusuora.pohja(0, 10, 8)
lukusuora.vali(2, 8, True, False, "$a$", "$b$")
\end{kuva}
ESIM: Piirretään havainnollistava kuva, jossa on kaksi lukusuoraa. Alemmalla lukusuoralla kaikki nimet laitetaan viivan alapuolelle. Molempiin lukusuoriin merkitään pystyviivalla kohta 0. Kuvassa näytetään nuolin miten väli [1, 2[ kuvautuu väliksi [1, 4[ toiseen korotuksessa ja erityisesti miten 3/2 kuvautuu pisteeseen (3/2)^2.
\begin{kuva}
lukusuora.pohja(0, 5, 9, n = 2)
lukusuora.kohta(0, "$0$", 1)
lukusuora.kohta(0, "$0$", 2, nimi_ylos = False)
with vari("red"):
lukusuora.nuoli(1, 1, 1, 2)
lukusuora.nuoli(1.5, 1.5**2, 1, 2)
lukusuora.nuoli(2, 4, 1, 2)
lukusuora.vali(1, 2, True, False, "$1$", "$2$", 1)
lukusuora.vali(1, 4, True, False, "$1^2$", "$2^2$", 2, nimi_ylos = False)
lukusuora.piste(1.5, "$3/2$", 1)
lukusuora.piste(1.5**2, "$(3/2)^2$", 2, nimi_ylos = False)
\end{kuva}
- funktio vari: Asettaa piirrossa käytettävän värin. Väriä käytetään esim. pisteisiin, kuvaajiin ja niiden nimiin.
- parametri uusivari: Uusi käytettävä väri TiKZin ymmärtämässä muodossa. xcolor-värit ovat hyviä, esimerkiksi "red", "blue", "black!10!white" (sekoitus mustasta ja valkoisesta, 10% mustaa).
- funktio paksuus: Asettaa kuvaajien ja muiden viivojen piirrossa käyttettävän viivanpaksuuden.
- parametri kerroin: Uuden paksuuden kerroin suhteessa oletuspaksuuteen.
ESIM: Piirretään ensin tavallinen funktion x kuvaaja ja sitten punainen paksu funktion -y kuvaaja samaan pohjaan.
\begin{kuva}
kuvaaja.pohja(-1, 1, -1, 1)
kuvaaja.piirra("x")
vari("red")
paksuus(2)
kuvaaja.piirra("-x")
\end{kuva}
Piirtoasetukset muuttavat asetuksia nykyisen kuvan loppuun asti. Jos halutaan käyttää asetuksia vain tilapäisesti, täytyy koodi laittaa with palautin():
-blokkiin, joka sisennetyn koodin loputtua palauttaa asetukset.
ESIM: Piirretään ensin tavallinen piste P, sitten piste Q sinisellä, sitten taas tavallinen piste R.
\begin{kuva}
piste((0, 0), "P")
with palautin():
vari("blue")
piste((2, 0), "Q")
piste((1, 1.5), "R")
\end{kuva}
Kaikissa piirtoasetusfunktioissa on myös palautin-ominaisuus valmiina, joten saman voi kirjoittaa lyhemmin:
\begin{kuva}
piste((0, 0), "P")
with vari("blue"):
piste((2, 0), "Q")
piste((1, 1.5), "R")
\end{kuva}
tai jopa
\begin{kuva}
piste((0, 0), "P")
with vari("blue"): piste((2, 0), "Q")
piste((1, 1.5), "R")
\end{kuva}