# PhDr. Mgr. Jeroným Klimeš, Ph.D. 2020-07-23
# Máme obecnou rovnici přímky v rovině: y=ax+b, kde parametru "a" se říká anglicky slope neboli sklon a parametru "b" se anglicky říká intercept, neboli výsek/úsek na ose y. Pomocí těchto dvou parametrů se v programu R kreslí přímky pomocí příkazu: abline(intercept, slope).
# Narazil jsem na problém, jak tyto přímky otočit o 90°, popř. je zrcadlit. Samozřejmě pro matematiky úplná trivialita (analytická geometrie na úrovni střední školy), ale já jsem nad tím musel chvíli přemýšlet, tak předpokládám, že by se to někomu mohlo hodit.
# Na následujích obrázcích je červená přímka výchozí. Má intercept=1 a slope=2. Zjistíte si, jakou byste chtěli mít výchozí přímku, například zelenou, pak zelený text vám napoví, jak musíte transformovat parametry, aby vygenerovalo požadovanou transformaci.
# Následuje vlastní program v jazyku R
# z prikazove radky: R < operace_s_primkou.R --no-save # takto se to spusti z prikazove radky # source('operace_s_primkou.R') # takto se to spousti v R setwd('/home/user/R/scripts/') # tady si nastavte cestu ke svym skriptum options(digits=3) # zaokrouhlí výstup na tři číslice # --- zrcadleni podle osy x a y ------------------------------------------ slope=2 intercept=1 par(pty="s") # nakreslí čtvercový graf plot(0,0, type = "n", asp = 1, bty="n", axes=F, ylab="", xlab="") # vypne osy abline(h=0, col="yellow", untf = TRUE ) # nakreslí souřadnice abline(v=0, col="yellow") abline(intercept,slope, col="red", lwd=4) # y=2x+1; abline(intercept,-slope, col="blue", lwd=3) # zrcadli podle osy y abline(-intercept,-slope, col="green", lwd=3) # zrcadli podle osy x abline(-intercept ,slope, col="violet", lwd=3) # rotace o 180°, popř. symetrie podle [0; 0] mtext("Zrcadlení přímky podle osy x a y", side = 3) text(-.5,-1, "[slope; intercept] [2; 1]", col = "red") text(+.5, -1, "[-slope; intercept]", col = "blue") text(-.5, +1, "[-slope; -intercept]", col = "green") text(+.5, 1, "[slope; -intercept]", col = "violet") text(+.75, 0, "osa +X", col = "brown") text(-.75, 0, "osa -X", col = "brown") text(0,+.5, "osa +Y", col = "brown") text(0,-.5, "osa -Y", col = "brown") text(0,0, "y=slope*x+intercept=ax+b", col = "brown") pch = 22, cex = 2, col = "red") # kresli to do divnych koordinat text(0,intercept-0.1, "intercept", col = "brown") dev.copy(png, filename="operace_s_primkou_zrcadleni_podle_osy_XY.png"); dev.off(); # --- rotace primky o 90° ------------------------------------------ intercept=1 slope=2 par(pty="s") # vynuti ctverec plot(0,0, type = "n", asp = 1, bty="n", axes=F, ylab="", xlab="") abline(h=0, col="yellow", untf = TRUE ) abline(v=0, col="yellow") abline(intercept,slope, col="red", lwd=4) # y=2x+1; y=0; x=-1/2=-(intercept/slope) Toto je trasformovaný sklon/slope. abline((intercept/slope),-1/slope, col="blue", lwd=3) # +90° abline(-intercept,slope, col="green", lwd=3) # +180° abline(-(intercept/slope),-1/slope, col="violet", lwd=3) # +270° mtext("Rotace přímky po 90°", side = 3) text(-.5,-1, "[slope; intercept] [2; 1]", col = "red") text(-.5, +1, "[-1/slope; intercept/slope]", col = "blue") text(+.5, 1, "[slope; -intercept]", col = "green") text(+.5, -1, "[-1/slope; -intercept/slope]", col = "violet") text(+.75, 0, "osa +X", col = "brown") text(-.75, 0, "osa -X", col = "brown") text(0,+.7, "osa +Y", col = "brown") text(0,-.7, "osa -Y", col = "brown") text(0.05,+.1, "y=slope*x+intercept=ax+b", col = "brown") text(0,intercept, "O", pch = 22, cex = 2, col = "red") text(0,intercept-0.1, "intercept", col = "brown") dev.copy(png, filename="operace_s_primkou_rotace_po_90_stupnu.png"); dev.off(); stop("konec experimentů s analytickou geometrií -------------------------------------------------------------\n")