{"id":122,"date":"2018-12-12T16:47:47","date_gmt":"2018-12-12T16:47:47","guid":{"rendered":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/?post_type=chapter&#038;p=122"},"modified":"2019-04-08T16:12:01","modified_gmt":"2019-04-08T16:12:01","slug":"lisalugemine-funktsiooni-graafik-liikuvad-pildid","status":"publish","type":"chapter","link":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/chapter\/lisalugemine-funktsiooni-graafik-liikuvad-pildid\/","title":{"raw":"Lisalugemine. Funktsiooni graafik, liikuvad pildid","rendered":"Lisalugemine. Funktsiooni graafik, liikuvad pildid"},"content":{"raw":"See peat\u00fckk on m\u00f5eldud huvilistele, kes tahavad kasutada Tkinterit funktsioonide graafikute joonistamiseks ning piltide liikumise loomiseks.\r\n<h2>Funktsiooni graafik<\/h2>\r\n<p class=\"vspace\">Koostame programmi, mis joonistab m\u00f5ne meie valitud (matemaatilise) funktsiooni (nt y=x<sup>3<\/sup>) graafiku.<\/p>\r\n<p class=\"vspace\">Kuigi Tkinter sobib h\u00e4sti graafikute joonistamiseks, tekitab m\u00f5ningast ebamugavust teistmoodi koordinaatide s\u00fcsteem \u2013 matemaatikas oleme harjunud, et y kasvab \u00fclespoole, mitte alla ning koordinaatide alguspunkt on harjumusp\u00e4raselt olnud pigem joonise keskel. V\u00f5tame abiks klassi Canvas funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">move<\/code>, mis v\u00f5imaldab tahvlil olevaid objekte horisontaalset ja vertikaalset telge m\u00f6\u00f6da \u00fcmber t\u00f5sta. Seega paigutame k\u00f5ik objektid harilikku koordinaadistikku, seej\u00e4rel rakendame funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">move<\/code><\/code>. Peegelduse x-telje suhtes korraldame sellega, et funktsiooni v\u00e4\u00e4rtuste kogumisel kogume y asemel -y. N\u00e4iteprogramm joonistab funktsiooni y=x graafiku:<\/p>\r\n<strong>N\u00e4iteprogramm. y=x graafik<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">from tkinter import *\r\nraam = Tk()\r\n# tahvli laius\r\nw = 500\r\n# tahvli pikkus\r\nh = 500\r\ntahvel = Canvas(raam, width=w, height=h, bg=\"white\")\r\n \r\n# vertikaalne telg\r\ntahvel.create_line(0, h\/2, 0, -h\/2, arrow=LAST)\r\n# horisontaalne telg\r\ntahvel.create_line(-w\/2, 0, w\/2, 0, arrow=LAST)\r\n \r\n# joonistame l\u00f5igud (x1,f(x1)) - (x2,f(x2))\r\nx1 = -w\/\/2\r\nwhile x1 &lt; w\/\/2:\r\n    x2 = x1+1\r\n    # olgu alguseks lineaarne funktsioon\r\n    y1 = x1\r\n    y2 = x2\r\n    # -y on selleks, et peegeldada x-telje suhtes\r\n    tahvel.create_line(x1, -y1, x2, -y2)\r\n    x1 += 1\r\n \r\n# nihutame k\u00f5ik objektid 250px v\u00f5rra paremale ja alla\r\ntahvel.move(ALL, w\/2, h\/2)\r\n \r\ntahvel.pack()\r\n \r\nraam.mainloop()<\/pre>\r\nKatseta programmi ka teiste funktsioonidega (5x, x**3 jne).\r\n<h2>Liikuvad kujutised<\/h2>\r\nProovime joonistada osutitega kella, mis ennast aja jooksul v\u00e4rskendaks. V\u00f5rreldes eelmiste \u00fclesannetega, kus tegemist oli sisuliselt staatiliste kujutistega, on n\u00fc\u00fcd tarvis muuta graafikaobjektide olekuid rakenduse t\u00f6\u00f6 ajal.\r\n\r\nGraafikaobjektide loomisel saab neile anda unikaalseid nimesid, mille j\u00e4rgi saab need hiljem tahvlil \u00fcles leida, nt\r\n<div class=\"container\">\r\n<pre class=\"line number1 index0 alt2 EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\"><code class=\"python functions\">id<\/code> <code class=\"python keyword\">=<\/code> <code class=\"python plain\">tahvel.create_line(x0,y0,...,xn,yn)<\/code><\/pre>\r\nKasutades nime saab objekti n\u00e4iteks kustutada, nihutada v\u00f5i muuta tema argumente. Objektidega manipuleerimiseks kasutame klassis Canvas defineeritud meetodeid.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\"># kustutamine\r\ntahvel.delete(id)\r\n \r\n# nihutamine\r\ntahvel.move(id, x, y)\r\n \r\n# objekti argumentide tagastamine\r\ntahvel.itemcget(id, \"width\")\r\n \r\n# koordinaatide uuendamine\r\ntahvel.coords(id, x0,y0,...,xn,yn )<\/pre>\r\nSelles \u00fclesandes huvitab meid viimane meetod, mille abil me saame osutite positsiooni uuendada. Tekitame uue raami ja tahvli. Kella keskpunkt olgu tahvli keskel.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">from tkinter import *\r\nraam = Tk()\r\nraam.title(\"Kell\")\r\n# tahvli laius\r\nw = 500\r\n# tahvli pikkus\r\nh = 500\r\n \r\ntahvel = Canvas(raam, width=w, height=h, bg=\"white\")\r\n \r\n# kella raam\r\ntahvel.create_oval(10,10,w-10,h-10)\r\n# kella keskpunkt\r\ntahvel.create_oval(w\/2-5,h\/2-5,w\/2+5,h\/2+5,fill=\"black\")<\/pre>\r\n<p class=\"vspace\">Joonistame sekundiosuti (mis on sirgjoon) ja salvestame tema andmed muutujasse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sek_id<\/code>:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">sek_id = tahvel.create_line(w\/2,h\/2,w\/2,20,fill=\"red\")<\/pre>\r\nKuna osuti \u00fcks ots on fikseeritud kella keskel, siis huvitavad meid ainult liikuva otsa koordinaadid mingil ajahetkel t. Kui on antud sekundite arv <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sekundid,<\/code> siis on v\u00f5imalik arvutada vastavad punkti koordinaadid x ja y:\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">from math import *\r\n \r\n# osuti liikuva tipu koordinaadid\r\n# arvutame sekundiosuti pikkuse\r\nr = min(w\/2,h\/2)-20\r\n \r\n# arvutame x koordinaadi\r\nx = r*cos(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n# arvutame y koordinaadi\r\ny = -r*sin(pi\/2-sekundid\/60.0*2*pi)<\/pre>\r\nJ\u00e4rgmise sammuna loome funktsiooni, mis loeb jooksvalt aega ja uuendab sekundiosuti positsiooni. Uus funktsioon luuakse v\u00f5tmes\u00f5na <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def<\/code><\/code> abil, funktsiooni sisu on taandatud. T\u00e4psemalt k\u00e4sitleme seda hilisemates peat\u00fckkides.\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">import time\r\n \r\ndef uuenda():\r\n    # loeme jooksva sekundi\r\n    sekundid = time.localtime().tm_sec\r\n \r\n    # osuti liikuva tipu koordinaadid\r\n    # arvutame sekundiosuti pikkuse\r\n    r = min(w\/2,h\/2)-20\r\n \r\n    # arvutame x koordinaadi\r\n    x = r*cos(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n    # arvutame y koordinaadi\r\n    y = -r*sin(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n \r\n    # uuendame osuti positsiooni\r\n    tahvel.coords(sek_id, 0, 0, x, y)\r\n \r\n    # nihutame keskele\r\n    tahvel.move(sek_id, w\/2, h\/2)\r\n \r\n    # ootame 1 sekundi ja siis uuendame kellaaega uuesti\r\n    raam.after(1000, uuenda)<\/pre>\r\n<p class=\"vspace\">Kutsume funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">uuenda<\/code><\/code> v\u00e4lja enne Tkinteri p\u00f5hits\u00fcklisse sisenemist:<\/p>\r\n\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">uuenda()\r\ntahvel.pack()\r\nraam.mainloop()<\/pre>\r\nKokkupandud kood on j\u00e4rgmine:\r\n\r\n<strong>N\u00e4iteprogramm. Osutitega kell<\/strong>\r\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">from tkinter import *\r\nfrom math import *\r\nimport time\r\nraam = Tk()\r\nraam.title(\"Kell\")\r\n# tahvli laius\r\nw = 500\r\n# tahvli pikkus\r\nh = 500\r\n \r\ntahvel = Canvas(raam, width=w, height=h, bg=\"white\")\r\n \r\n# kella raam\r\ntahvel.create_oval(10,10,w-10,h-10)\r\n# kella keskpunkt\r\ntahvel.create_oval(w\/2-5,h\/2-5,w\/2+5,h\/2+5,fill=\"black\")\r\nsek_id = tahvel.create_line(w\/2,h\/2,w\/2,20,fill=\"red\")\r\n \r\ndef uuenda(): \r\n    # loeme jooksva sekundi\r\n    sekundid = time.localtime().tm_sec\r\n \r\n    # osuti liikuva tipu koordinaadid\r\n    # arvutame sekundiosuti pikkuse\r\n    r = min(w\/2,h\/2)-20\r\n \r\n    # arvutame x koordinaadi\r\n    x = r*cos(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n    # arvutame y koordinaadi\r\n    y = -r*sin(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n    # uuendame osuti positsiooni\r\n    tahvel.coords(sek_id, 0, 0, x, y)\r\n \r\n    # nihutame keskele\r\n    tahvel.move(sek_id, w\/2, h\/2)\r\n \r\n    #ootame 1 sekundi ja siis uuendame kellaaega uuesti\r\n    raam.after(1000, uuenda)\r\n \r\nuuenda()\r\ntahvel.pack()\r\nraam.mainloop()<\/pre>\r\nT\u00e4ienda kella. Lisa minuti- ja tunniosuti, mis samuti muudaksid aja jooksul oma positsiooni.\r\n\r\n<\/div>\r\nPalun kommenteeri seda materjali <a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLScCF-qR4U21Xd2Y9AL3Qj_06ULCdMz5r9SUIyLJyEK55jtPkA\/viewform\" target=\"_blank\" rel=\"noopener\">Google'i k\u00fcsimustikus<\/a>.","rendered":"<p>See peat\u00fckk on m\u00f5eldud huvilistele, kes tahavad kasutada Tkinterit funktsioonide graafikute joonistamiseks ning piltide liikumise loomiseks.<\/p>\n<h2>Funktsiooni graafik<\/h2>\n<p class=\"vspace\">Koostame programmi, mis joonistab m\u00f5ne meie valitud (matemaatilise) funktsiooni (nt y=x<sup>3<\/sup>) graafiku.<\/p>\n<p class=\"vspace\">Kuigi Tkinter sobib h\u00e4sti graafikute joonistamiseks, tekitab m\u00f5ningast ebamugavust teistmoodi koordinaatide s\u00fcsteem \u2013 matemaatikas oleme harjunud, et y kasvab \u00fclespoole, mitte alla ning koordinaatide alguspunkt on harjumusp\u00e4raselt olnud pigem joonise keskel. V\u00f5tame abiks klassi Canvas funktsiooni <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">move<\/code>, mis v\u00f5imaldab tahvlil olevaid objekte horisontaalset ja vertikaalset telge m\u00f6\u00f6da \u00fcmber t\u00f5sta. Seega paigutame k\u00f5ik objektid harilikku koordinaadistikku, seej\u00e4rel rakendame funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">move<\/code><\/code>. Peegelduse x-telje suhtes korraldame sellega, et funktsiooni v\u00e4\u00e4rtuste kogumisel kogume y asemel -y. N\u00e4iteprogramm joonistab funktsiooni y=x graafiku:<\/p>\n<p><strong>N\u00e4iteprogramm. y=x graafik<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">from tkinter import *\r\nraam = Tk()\r\n# tahvli laius\r\nw = 500\r\n# tahvli pikkus\r\nh = 500\r\ntahvel = Canvas(raam, width=w, height=h, bg=\"white\")\r\n \r\n# vertikaalne telg\r\ntahvel.create_line(0, h\/2, 0, -h\/2, arrow=LAST)\r\n# horisontaalne telg\r\ntahvel.create_line(-w\/2, 0, w\/2, 0, arrow=LAST)\r\n \r\n# joonistame l\u00f5igud (x1,f(x1)) - (x2,f(x2))\r\nx1 = -w\/\/2\r\nwhile x1 &lt; w\/\/2:\r\n    x2 = x1+1\r\n    # olgu alguseks lineaarne funktsioon\r\n    y1 = x1\r\n    y2 = x2\r\n    # -y on selleks, et peegeldada x-telje suhtes\r\n    tahvel.create_line(x1, -y1, x2, -y2)\r\n    x1 += 1\r\n \r\n# nihutame k\u00f5ik objektid 250px v\u00f5rra paremale ja alla\r\ntahvel.move(ALL, w\/2, h\/2)\r\n \r\ntahvel.pack()\r\n \r\nraam.mainloop()<\/pre>\n<p>Katseta programmi ka teiste funktsioonidega (5x, x**3 jne).<\/p>\n<h2>Liikuvad kujutised<\/h2>\n<p>Proovime joonistada osutitega kella, mis ennast aja jooksul v\u00e4rskendaks. V\u00f5rreldes eelmiste \u00fclesannetega, kus tegemist oli sisuliselt staatiliste kujutistega, on n\u00fc\u00fcd tarvis muuta graafikaobjektide olekuid rakenduse t\u00f6\u00f6 ajal.<\/p>\n<p>Graafikaobjektide loomisel saab neile anda unikaalseid nimesid, mille j\u00e4rgi saab need hiljem tahvlil \u00fcles leida, nt<\/p>\n<div class=\"container\">\n<pre class=\"line number1 index0 alt2 EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-linenumbers=\"false\"><code class=\"python functions\">id<\/code> <code class=\"python keyword\">=<\/code> <code class=\"python plain\">tahvel.create_line(x0,y0,...,xn,yn)<\/code><\/pre>\n<p>Kasutades nime saab objekti n\u00e4iteks kustutada, nihutada v\u00f5i muuta tema argumente. Objektidega manipuleerimiseks kasutame klassis Canvas defineeritud meetodeid.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\"># kustutamine\r\ntahvel.delete(id)\r\n \r\n# nihutamine\r\ntahvel.move(id, x, y)\r\n \r\n# objekti argumentide tagastamine\r\ntahvel.itemcget(id, \"width\")\r\n \r\n# koordinaatide uuendamine\r\ntahvel.coords(id, x0,y0,...,xn,yn )<\/pre>\n<p>Selles \u00fclesandes huvitab meid viimane meetod, mille abil me saame osutite positsiooni uuendada. Tekitame uue raami ja tahvli. Kella keskpunkt olgu tahvli keskel.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">from tkinter import *\r\nraam = Tk()\r\nraam.title(\"Kell\")\r\n# tahvli laius\r\nw = 500\r\n# tahvli pikkus\r\nh = 500\r\n \r\ntahvel = Canvas(raam, width=w, height=h, bg=\"white\")\r\n \r\n# kella raam\r\ntahvel.create_oval(10,10,w-10,h-10)\r\n# kella keskpunkt\r\ntahvel.create_oval(w\/2-5,h\/2-5,w\/2+5,h\/2+5,fill=\"black\")<\/pre>\n<p class=\"vspace\">Joonistame sekundiosuti (mis on sirgjoon) ja salvestame tema andmed muutujasse <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sek_id<\/code>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">sek_id = tahvel.create_line(w\/2,h\/2,w\/2,20,fill=\"red\")<\/pre>\n<p>Kuna osuti \u00fcks ots on fikseeritud kella keskel, siis huvitavad meid ainult liikuva otsa koordinaadid mingil ajahetkel t. Kui on antud sekundite arv <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sekundid,<\/code> siis on v\u00f5imalik arvutada vastavad punkti koordinaadid x ja y:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">from math import *\r\n \r\n# osuti liikuva tipu koordinaadid\r\n# arvutame sekundiosuti pikkuse\r\nr = min(w\/2,h\/2)-20\r\n \r\n# arvutame x koordinaadi\r\nx = r*cos(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n# arvutame y koordinaadi\r\ny = -r*sin(pi\/2-sekundid\/60.0*2*pi)<\/pre>\n<p>J\u00e4rgmise sammuna loome funktsiooni, mis loeb jooksvalt aega ja uuendab sekundiosuti positsiooni. Uus funktsioon luuakse v\u00f5tmes\u00f5na <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">def<\/code><\/code> abil, funktsiooni sisu on taandatud. T\u00e4psemalt k\u00e4sitleme seda hilisemates peat\u00fckkides.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">import time\r\n \r\ndef uuenda():\r\n    # loeme jooksva sekundi\r\n    sekundid = time.localtime().tm_sec\r\n \r\n    # osuti liikuva tipu koordinaadid\r\n    # arvutame sekundiosuti pikkuse\r\n    r = min(w\/2,h\/2)-20\r\n \r\n    # arvutame x koordinaadi\r\n    x = r*cos(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n    # arvutame y koordinaadi\r\n    y = -r*sin(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n \r\n    # uuendame osuti positsiooni\r\n    tahvel.coords(sek_id, 0, 0, x, y)\r\n \r\n    # nihutame keskele\r\n    tahvel.move(sek_id, w\/2, h\/2)\r\n \r\n    # ootame 1 sekundi ja siis uuendame kellaaega uuesti\r\n    raam.after(1000, uuenda)<\/pre>\n<p class=\"vspace\">Kutsume funktsiooni <code><code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">uuenda<\/code><\/code> v\u00e4lja enne Tkinteri p\u00f5hits\u00fcklisse sisenemist:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-linenumbers=\"false\">uuenda()\r\ntahvel.pack()\r\nraam.mainloop()<\/pre>\n<p>Kokkupandud kood on j\u00e4rgmine:<\/p>\n<p><strong>N\u00e4iteprogramm. Osutitega kell<\/strong><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"null\">from tkinter import *\r\nfrom math import *\r\nimport time\r\nraam = Tk()\r\nraam.title(\"Kell\")\r\n# tahvli laius\r\nw = 500\r\n# tahvli pikkus\r\nh = 500\r\n \r\ntahvel = Canvas(raam, width=w, height=h, bg=\"white\")\r\n \r\n# kella raam\r\ntahvel.create_oval(10,10,w-10,h-10)\r\n# kella keskpunkt\r\ntahvel.create_oval(w\/2-5,h\/2-5,w\/2+5,h\/2+5,fill=\"black\")\r\nsek_id = tahvel.create_line(w\/2,h\/2,w\/2,20,fill=\"red\")\r\n \r\ndef uuenda(): \r\n    # loeme jooksva sekundi\r\n    sekundid = time.localtime().tm_sec\r\n \r\n    # osuti liikuva tipu koordinaadid\r\n    # arvutame sekundiosuti pikkuse\r\n    r = min(w\/2,h\/2)-20\r\n \r\n    # arvutame x koordinaadi\r\n    x = r*cos(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n    # arvutame y koordinaadi\r\n    y = -r*sin(pi\/2-sekundid\/60.0*2*pi)\r\n \r\n    # uuendame osuti positsiooni\r\n    tahvel.coords(sek_id, 0, 0, x, y)\r\n \r\n    # nihutame keskele\r\n    tahvel.move(sek_id, w\/2, h\/2)\r\n \r\n    #ootame 1 sekundi ja siis uuendame kellaaega uuesti\r\n    raam.after(1000, uuenda)\r\n \r\nuuenda()\r\ntahvel.pack()\r\nraam.mainloop()<\/pre>\n<p>T\u00e4ienda kella. Lisa minuti- ja tunniosuti, mis samuti muudaksid aja jooksul oma positsiooni.<\/p>\n<\/div>\n<p>Palun kommenteeri seda materjali <a href=\"https:\/\/docs.google.com\/forms\/d\/e\/1FAIpQLScCF-qR4U21Xd2Y9AL3Qj_06ULCdMz5r9SUIyLJyEK55jtPkA\/viewform\" target=\"_blank\" rel=\"noopener\">Google&#8217;i k\u00fcsimustikus<\/a>.<\/p>\n","protected":false},"author":12,"menu_order":6,"template":"","meta":{"pb_show_title":"on","pb_short_title":"","pb_subtitle":"","pb_authors":[],"pb_section_license":""},"chapter-type":[],"contributor":[],"license":[],"class_list":["post-122","chapter","type-chapter","status-publish","hentry"],"part":97,"_links":{"self":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters"}],"about":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/types\/chapter"}],"author":[{"embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/users\/12"}],"version-history":[{"count":4,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/122\/revisions"}],"predecessor-version":[{"id":421,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/122\/revisions\/421"}],"part":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/parts\/97"}],"metadata":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapters\/122\/metadata\/"}],"wp:attachment":[{"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/media?parent=122"}],"wp:term":[{"taxonomy":"chapter-type","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/pressbooks\/v2\/chapter-type?post=122"},{"taxonomy":"contributor","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/contributor?post=122"},{"taxonomy":"license","embeddable":true,"href":"https:\/\/web.htk.tlu.ee\/digitaru\/programmeerimine\/wp-json\/wp\/v2\/license?post=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}