Transformace v rovině

Transformace projektivní, afinní, podobné a shodné.

Projektivní transformace je určena obrazem 4 bodů (A, B, C, D), afinní transformace je určena obrazem 3 bodů (A, B, C), ...

Přepínač z zužuje výběr (0 projektivní, 1 afinní, 2 podobné, 3 shodné).
Přepínač o mění orientaci (pokud z=2 nebo 3).
Přepínač q zobrazuje volný bod L a jeho obraz L' (pro q>0), příp. bod K na kružnici a jeho obraz K' (pro q>1).
Přepínač u zobrazuje obraz a vzor nevlastní přímky (pokud z=0).

projektivní

afinní

shodné

podobné

det=0

A = (0, 0)
B = (2, 0)
C = (0, 2)
k = Circle(A, B, C)
D_0 = (2, 2)
z = 2 (slider from 0 to 3, step 1)
D'_0 = (8.049328510938814, 3.107893474936397)
C'_0 = (7.002665906637163, 3.94865523904757)
A'_0 = (5.492726411906912, 2.2671317108252227)
A': A'_0
B'_0 = (8.27238775447851, 1.4435283500632574)
D: D_0
w: (Vector[A, D] * Invert[{{x(Vector[A, B]), y(Vector[A, B])}, {x(Vector[A, C]), y(Vector[A, C])}}])
B'_3 = Intersect(Circle[A', Segment[A, B]], Ray[A', B'_0])
B' = If(z ≟ 3, B'_3, B'_0)
koef: Segment[A', B'] / Segment[A, B]
o = 1 (slider from 1 to 2, step 1)
C'_3 = Element({Intersect[Circle[A', Segment[A, C]], Circle[B'_3, Segment[B, C]]]}, o)
C'_2 = Intersect(Circle[A', (koef * Segment[A, C])], Ray[A', C'_3])
C' = If(z ≟ 3, C'_3, If[z ≟ 2, C'_2, C'_0])
D'_1: A' + (x(w) * Vector[A', B']) + (y(w) * Vector[A', C'])
D' = If(z > 0, D'_1, D'_0)
q = 1 (slider from 0 to 2, step 1)
mnohoúhelník = If(z > 0, Polygon[A, B, C], Polygon[A, B, D, C])
u = 0 (slider from 0 to 1, step 1)
text5: "koef≈" + koef + ""
M = PerspectiveMatrix(A, B, C, D)
N = PerspectiveMatrix(A', B', C', D')
F: (N * Invert[M])
K = Point(k)
K' = ApplyMatrix(F, K)
mnohoúhelník' = If(z > 0, Polygon[A', B', C'], Polygon[A', B', D', C'])
det = Determinant(F)
text4: "det≈" + det + ""
text7: "det=" + det + ""
u': (F * Transpose[{{1, 0, 0}}])
v': (F * Transpose[{{0, 1, 0}}])
U' = If(Element[u', 3, 1] ≠ 0, (Element[u', 1, 1] / Element[u', 3, 1], Element[u', 2, 1] / Element[u', 3, 1]))
V' = If(Element[v', 3, 1] ≠ 0, (Element[v', 1, 1] / Element[v', 3, 1], Element[v', 2, 1] / Element[v', 3, 1]))
vzor_u: (Invert[F] * Transpose[{{1, 0, 0}}])
vzor_v: (Invert[F] * Transpose[{{0, 1, 0}}])
vzor_U = If(Element[vzor_u, 3, 1] ≠ 0, (Element[vzor_u, 1, 1] / Element[vzor_u, 3, 1], Element[vzor_u, 2, 1] / Element[vzor_u, 3, 1]))
vzor_V = If(Element[vzor_v, 3, 1] ≠ 0, (Element[vzor_v, 1, 1] / Element[vzor_v, 3, 1], Element[vzor_v, 2, 1] / Element[vzor_v, 3, 1]))
vzor_n = Line(vzor_U, vzor_V)
n' = Line(U', V')
text3: "F≈" + (LaTeX[F]) + ""
k' = ApplyMatrix(F, k)
L = (4, 0)
L' = ApplyMatrix(F, L)

Tool: Perspective Matrix (command PerspectiveMatrix)
Input: A, B, C, D
Output: M

v = Vector(C, B)
w = Vector(C, D)
u = Vector(A, C)
k: ((-((x(u) * y(w)) - (y(u) * x(w))))) / ((x(v) * y(w)) - (y(v) * x(w)))
l: ((-((x(u) * y(v)) - (x(v) * y(u))))) / ((x(w) * y(v)) - (y(w) * x(v)))
M: {{(k * x(B)) - x(A), (l * x(D)) - x(A), x(A)}, {(k * y(B)) - y(A), (l * y(D)) - y(A), y(A)}, {k - 1, l - 1, 1}}

Tool: Obraz Bodu (command ObrazBodu)
Input: F, A
Output: A'

F: {{8.25}, {1.5}, {0.75}}
A' = ApplyMatrix(F, A)