Geometric Construction of Reflection and Rotation Transformations
2015-02-04 02:50
This example demonstrates how to perform composite geometric transformations using GeoGebra's CAS and geometry commands. By utilizing commands such as Mirror, Rotate, and Midpoint, it applies reflection and rotation operations to geometric objects like points, segments, and polygons. It explores the properties of transformations and graphical relationships in plane geometry, making it ideal for st
In collections
Geometric Transformations GeoGebra Book
<?xml version="1.0" encoding="utf-8"?>
<geogebra format="5.0" version="5.0.42.0" id="04591e66-c985-4709-8777-45a29128d1de" xsi:noNamespaceSchemaLocation="http://www.geogebra.org/ggb.xsd" xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<gui>
<window width="878" height="700" />
<perspectives>
<perspective id="tmp">
<panes>
<pane location="" divider="0.5034168564920274" orientation="1" />
</panes>
<views>
<view id="4" toolbar="0 59 || 2020 , 2021 , 2022 , 66 || 2001 , 2003 , 2002 , 2004 , 2005 || 2040 , 2041 , 2042 , 2044 , 2043" visible="false" inframe="false" stylebar="false" location="3,1" size="300" window="100,100,600,400" />
<view id="2" visible="false" inframe="true" stylebar="true" location="3,3" size="200" window="595,250,250,400" />
<view id="4097" visible="false" inframe="true" stylebar="true" location="1,1" size="400" window="740,350,700,550" />
<view id="1" visible="true" inframe="false" stylebar="true" location="1" size="416" window="100,100,600,400" />
<view id="8" toolbar="1001 | 1002 | 1003 || 1005 | 1004 || 1006 | 1007 | 1010 | 1011 || 1008 1009 || 66 68 || 6" visible="true" inframe="false" stylebar="true" location="3" size="442" window="100,100,600,400" />
<view id="16" visible="false" inframe="false" stylebar="false" location="1" size="150" window="50,50,500,500" />
<view id="32" visible="false" inframe="false" stylebar="true" location="1" size="150" window="50,50,500,500" />
<view id="64" visible="false" inframe="true" stylebar="true" location="1" size="150" window="50,50,500,500" />
<view id="70" toolbar="0 || 2020 || 2021 || 2022" visible="false" inframe="true" stylebar="true" location="1" size="150" window="50,50,500,500" />
<view id="512" visible="false" inframe="false" stylebar="false" location="1" size="300" window="50,50,500,500" />
</views>
<toolbar show="true" items="0 39 59 | 1 501 67 , 5 19 , 72 | 2 15 45 , 18 65 , 7 37 | 4 3 8 9 , 13 44 , 58 , 47 | 16 51 64 , 70 | 10 34 53 11 , 24 20 22 , 21 23 | 55 56 57 , 12 | 36 46 , 38 49 50 , 71 | 30 29 54 32 31 33 | 17 26 62 73 , 14 66 68 | 25 52 60 61 | 40 41 42 , 27 28 35 , 6" position="1" help="false" />
<input show="true" cmd="true" top="false" />
<dockBar show="true" east="true" />
</perspective>
</perspectives>
<labelingStyle val="3"/>
<font size="12"/>
<graphicsSettings javaLatexFonts="false"/>
</gui>
<euclidianView>
<size width="416" height="544"/>
<coordSystem xZero="192.66666666666669" yZero="315.00000000000006" scale="49.99999999999998" yscale="50.00000000000002"/>
<evSettings axes="true" grid="true" gridIsBold="false" pointCapturing="3" rightAngleStyle="1" checkboxSize="26" gridType="0"/>
<bgColor r="255" g="255" b="255"/>
<axesColor r="128" g="128" b="128"/>
<gridColor r="192" g="192" b="192"/>
<lineStyle axes="0" grid="10"/>
<axis id="0" show="true" label="" unitLabel="" tickStyle="1" showNumbers="true"/>
<axis id="1" show="true" label="" unitLabel="" tickStyle="1" showNumbers="true"/>
</euclidianView>
<kernel>
<continuous val="false"/>
<usePathAndRegionParameters val="true"/>
<decimals val="2"/>
<angleUnit val="degree"/>
<algebraStyle val="0"/>
<coordStyle val="0"/>
<angleFromInvTrig val="false"/>
</kernel>
<scripting blocked="false" disabled="false"/>
<construction title="" author="" date="">
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="平移矩陣" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="T" >
<cellPair>
<inputCell>
<expression value="T:={{1,0,a},{0,1,b},{0,0,1}}" eval="Evaluate[{{1, 0, a}, {0, 1, b}, {0, 0, 1}}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="T:={{1, 0, a}, {0, 1, b}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="旋轉矩陣" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="R" >
<cellPair>
<inputCell>
<expression value="R:={{cos(α), -sin(α), 0},{sin(α), cos(α), 0},{0,0,1}}" eval="Evaluate[{{cos(α), (-sin(α)), 0}, {sin(α), cos(α), 0}, {0, 0, 1}}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="R:={{cos(α), (-sin(α)), 0}, {sin(α), cos(α), 0}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="先旋轉再平移" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="M1" >
<cellPair>
<inputCell>
<expression value="M1:=T*R" eval="Evaluate[(T * R)]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{cos(α), (-sin(α)), a}, {sin(α), cos(α), b}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="平移:將直線 ax + by +c = 0 移回原點" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="T1" >
<cellPair>
<inputCell>
<expression value="T1:={{1,0,(c*a)/(a^2+b^2)},{0,1,c*b/(a^2+b^2)},{0,0,1}}" eval="Evaluate[{{1, 0, ((c * a)) / (a^(2) + b^(2))}, {0, 1, (c * b / (a^(2) + b^(2)))}, {0, 0, 1}}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="T1:={{1, 0, (a * c / (a^(2) + b^(2)))}, {0, 1, (b * c / (a^(2) + b^(2)))}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="平移:將原點移回直線 ax + by +c = 0" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="T2" >
<cellPair>
<inputCell>
<expression value="T2:={{1,0,-c*a/(a^2+b^2)},{0,1,-c*b/(a^2+b^2)},{0,0,1}}" eval="Evaluate[{{1, 0, ((-c) * a / (a^(2) + b^(2)))}, {0, 1, ((-c) * b / (a^(2) + b^(2)))}, {0, 0, 1}}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="T2:={{1, 0, ((-a) * c / (a^(2) + b^(2)))}, {0, 1, ((-b) * c / (a^(2) + b^(2)))}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="鏡射:對直線 ax + by = 0 作鏡射" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="L" >
<cellPair>
<inputCell>
<expression value="L:={{(b^2-a^2)/(a^2+b^2), (-2*a*b)/(a^2+b^2), 0},{(-2*a*b)/(a^2+b^2), (a^2-b^2)/(a^2+b^2), 0},{0,0,1}}" eval="Evaluate[{{(b^(2) - a^(2)) / (a^(2) + b^(2)), ((((-2) * a) * b)) / (a^(2) + b^(2)), 0}, {((((-2) * a) * b)) / (a^(2) + b^(2)), (a^(2) - b^(2)) / (a^(2) + b^(2)), 0}, {0, 0, 1}}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="L:={{((-a^(2)) + b^(2)) / (a^(2) + b^(2)), (((-2) * a) * b / (a^(2) + b^(2))), 0}, {(((-2) * a) * b / (a^(2) + b^(2))), (a^(2) - b^(2)) / (a^(2) + b^(2)), 0}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="128" b="128" g="0" />
</useAsText>
<inputCell>
<expression value="鏡射:對直線 ax + by + c = 0 作鏡射" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="L2" >
<cellPair>
<inputCell>
<expression value="L2:=T2*L*T1" eval="Evaluate[((T2 * L) * T1)]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{((-a^(2)) + b^(2)) / (a^(2) + b^(2)), (((-2) * a) * b / (a^(2) + b^(2))), (((-2) * a) * c / (a^(2) + b^(2)))}, {(((-2) * a) * b / (a^(2) + b^(2))), (a^(2) - b^(2)) / (a^(2) + b^(2)), (((-2) * b) * c / (a^(2) + b^(2)))}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="0" b="255" g="0" />
</useAsText>
<inputCell>
<expression value="鏡射:對直線 2x - y - 1 = 0 作鏡射" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="LL" >
<cellPair>
<inputCell>
<expression value="LL:=Substitute[L2,{a=2,b=-1,c=-1}]" eval="Substitute[L2,{a = 2, b = (-1), c = (-1)}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{((-3)) / 5, 4 / 5, 4 / 5}, {4 / 5, 3 / 5, ((-2)) / 5}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<element type="list" label="LL">
<objColor r="0" g="100" b="0" alpha="0.1"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<pointSize val="3"/>
<pointStyle val="-1"/>
</element>
<cascell>
<cellPair>
<inputCell>
<expression value="Simplify[LL]" eval="Simplify[LL]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{((-3)) / 5, 4 / 5, 4 / 5}, {4 / 5, 3 / 5, ((-2)) / 5}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<cascell>
<cellPair>
<useAsText>
<FontStyle value="1" />
<FontSizeM value="1.0" />
<FontColor r="0" b="255" g="0" />
</useAsText>
<inputCell>
<expression value="旋轉:60˚" />
</inputCell>
</cellPair>
</cascell>
<cascell caslabel="R60" >
<cellPair>
<inputCell>
<expression value="R60:=Substitute[R,{α= π /3}]" eval="Substitute[R,{α = π / 3}]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{1 / 2, ((-sqrt(3))) / 2, 0}, {sqrt(3) / 2, 1 / 2, 0}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<element type="list" label="R60">
<objColor r="0" g="100" b="0" alpha="0.1"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<pointSize val="3"/>
<pointStyle val="-1"/>
</element>
<cascell caslabel="Ans" >
<cellPair>
<inputCell>
<expression value="Ans:=R60*LL" eval="Evaluate[(R60 * LL)]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{(1 / 10 * (((-sqrt(3)) * 4) - 3)), (1 / 10 * (((-3) * sqrt(3)) + 4)), (1 / 5 * (sqrt(3) + 2))}, {(1 / 10 * (((-3) * sqrt(3)) + 4)), (1 / 10 * ((sqrt(3) * 4) + 3)), (1 / 5 * ((2 * sqrt(3)) - 1))}, {0, 0, 1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<element type="list" label="Ans">
<objColor r="0" g="100" b="0" alpha="0.1"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<pointSize val="3"/>
<pointStyle val="-1"/>
</element>
<element type="line" label="d">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<animation step="0.1" speed="1" type="0" playing="false"/>
<coords x="-2.0" y="1.0" z="1.0"/>
<lineStyle thickness="5" type="0" typeHidden="1"/>
<eqnStyle style="explicit"/>
</element>
<element type="point" label="P">
<show object="true" label="true"/>
<objColor r="0" g="0" b="255" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="7" y="26"/>
<labelMode val="3"/>
<animation step="0.1" speed="1" type="1" playing="false"/>
<coords x="3.0" y="1.0" z="1.0"/>
<pointSize val="5"/>
<pointStyle val="0"/>
<caption val="P(x, y)"/>
</element>
<command name="Mirror">
<input a0="P" a1="d"/>
<output a0="Q"/>
</command>
<element type="point" label="Q">
<show object="true" label="true"/>
<objColor r="0" g="204" b="0" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="-60" y="12"/>
<labelMode val="3"/>
<coords x="-0.1999999999999994" y="2.6000000000000005" z="1.0"/>
<pointSize val="5"/>
<pointStyle val="0"/>
<caption val="Q(m, n)"/>
</element>
<command name="Rotate">
<input a0="Q" a1="60*°"/>
<output a0="R_1"/>
</command>
<element type="point" label="R_1">
<show object="true" label="true"/>
<objColor r="255" g="153" b="0" alpha="0.0"/>
<layer val="0"/>
<labelOffset x="-49" y="2"/>
<labelMode val="3"/>
<coords x="-2.3516660498395403" y="1.1267949192431133" z="1.0"/>
<pointSize val="7"/>
<pointStyle val="0"/>
<caption val="R(X, Y)"/>
</element>
<element type="point" label="A">
<show object="false" label="true"/>
<objColor r="0" g="0" b="255" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<animation step="0.1" speed="1" type="1" playing="false"/>
<coords x="0.0" y="0.0" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Midpoint">
<input a0="P" a1="Q"/>
<output a0="B"/>
</command>
<element type="point" label="B">
<show object="false" label="true"/>
<objColor r="68" g="68" b="68" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="1.4000000000000004" y="1.8000000000000003" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
<command name="Segment">
<input a0="B" a1="P"/>
<output a0="e"/>
</command>
<element type="segment" label="e">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<decoration type="2"/>
<coords x="0.8000000000000003" y="1.5999999999999996" z="-4.0"/>
<lineStyle thickness="2" type="20" typeHidden="1"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="Segment">
<input a0="B" a1="Q"/>
<output a0="f"/>
</command>
<element type="segment" label="f">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<decoration type="2"/>
<coords x="-0.8000000000000003" y="-1.5999999999999996" z="4.0"/>
<lineStyle thickness="2" type="20" typeHidden="1"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="Segment">
<input a0="(0, 0)" a1="Q"/>
<output a0="g"/>
</command>
<element type="segment" label="g">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="-2.6000000000000005" y="-0.1999999999999994" z="0.0"/>
<lineStyle thickness="2" type="20" typeHidden="1"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="Segment">
<input a0="(0, 0)" a1="R_1"/>
<output a0="h"/>
</command>
<element type="segment" label="h">
<show object="true" label="false"/>
<objColor r="0" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="-1.1267949192431133" y="-2.3516660498395403" z="0.0"/>
<lineStyle thickness="2" type="20" typeHidden="1"/>
<outlyingIntersections val="false"/>
<keepTypeOnTransform val="true"/>
</element>
<command name="Angle">
<input a0="Q" a1="(0, 0)" a2="R_1"/>
<output a0="β"/>
</command>
<element type="angle" label="β">
<angleStyle val="1"/>
<value val="1.0471975511965976"/>
<show object="true" label="true"/>
<objColor r="255" g="0" b="0" alpha="0.1"/>
<layer val="0"/>
<labelOffset x="-28" y="-13"/>
<labelMode val="2"/>
<decoration type="6"/>
<lineStyle thickness="2" type="0" typeHidden="2"/>
<arcSize val="30"/>
</element>
<cascell caslabel="R_2" >
<cellPair>
<inputCell>
<expression value="R_2:=Ans*{{x(P)},{y(P)},{1}}" eval="Evaluate[(Ans * {{x[P]}, {y[P]}, {1}})]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="{{(1 / 10 * (((-sqrt(3)) * 13) - 1))}, {(1 / 10 * ((-sqrt(3)) + 13))}, {1}}" native="true"/>
</outputCell>
</cellPair>
</cascell>
<element type="list" label="R_2">
<objColor r="0" g="100" b="0" alpha="0.1"/>
<lineStyle thickness="2" type="0" typeHidden="1"/>
<pointSize val="3"/>
<pointStyle val="-1"/>
</element>
<cascell caslabel="R_3" >
<cellPair>
<inputCell>
<expression value="R_3:=(Element[R_2,1,1],Element[R_2,2,1])" eval="Evaluate[(Element[R_2,1,1], Element[R_2,2,1])]" evalCmd=""/>
</inputCell>
<outputCell>
<expression value="((((-13) * sqrt(3)) - 1) / 10, ((-sqrt(3)) + 13) / 10)" native="true"/>
</outputCell>
</cellPair>
</cascell>
<element type="point" label="R_3">
<show object="true" label="false"/>
<objColor r="255" g="0" b="0" alpha="0.0"/>
<layer val="0"/>
<labelMode val="0"/>
<coords x="-2.3516660498395403" y="1.1267949192431124" z="1.0"/>
<pointSize val="3"/>
<pointStyle val="0"/>
</element>
</construction>
</geogebra>