镜射与旋转变换的几何构造
2015-02-04 02:50
本范例演示了如何使用GeoGebra的运算区及几何命令进行复合几何变换。通过Mirror(镜射)、Rotate(旋转)、Midpoint(中点)等命令,对点、线段和多边形等几何对象进行反射与旋转操作,探究平面几何中的变换性质与图形关系,适合用于学习几何作图与变换理论。
所属专题
GeoGebra 几何变换互动学习资源
<?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>