うしブログ

うしブログ

趣味で運営する、GeoGebraの専門ブログ。

(作業メモ)StartPoint要検証(2行の場合;テキスト変更時未定義問題)

(要修復)ToggleButton・RollPolygonWithoutSlipping・貯金時計・直感力トレーニング

楕円の光線反射の作成

課題

楕円c、および、c内の異なる2点S,Gがある。下図のように、Sから、Gを通る光線を発射し、cの周で反射させる。下図は、6回目の反射が起こる直前の様子である。

f:id:usiblog:20190829042700p:plain

(1)GeoGebraにおいて、n回目の反射が起こる直前における、光線がcにぶつかった点を、リストオブジェクトとして取得したい。当該リストオブジェクトの定義を、c,S,G,n,および各種GeoGebraコマンドを用いて表せ。

 

(2)GeoGebraにおいて、n回目の反射が起こる直前における、光線の経路を、折れ線オブジェクトとして取得したい。当該折れ線オブジェクトの定義を、c,S,G,n,および各種GeoGebraコマンドを用いて表せ。

 

解答例

(1)

IterationList[Element[Remove[{Intersect[c, Ray[Reflect[α, Tangent[β, c]], β]]}, {β}], 1], α, β, {G, Element[RemoveUndefined[{Intersect[c, Ray[G, Vector[S, G]]]}], 1]}, n]

 

(2)

PolyLine[Join[{{S}, IterationList[Element[Remove[{Intersect[c, Ray[Reflect[α, Tangent[β, c]], β]]}, {β}], 1], α, β, {G, Element[RemoveUndefined[{Intersect[c, Ray[G, Vector[S, G]]]}], 1]}, n]}]]

 

参考:楕円の光線反射を作成するJavaScript関数
function opticalReflectionInEllipse(ellipseName, reflectionTime) {
    ggbApplet.deleteObject('USI00');
    ggbApplet.deleteObject('USI01');

    ggbApplet.evalCommand('USI01 = PointIn(Dilate(' + ellipseName + ', 0.99999, Center(' + ellipseName + ')))');
    ggbApplet.evalCommand('USI00 = PointIn((x - x(USI01))² + (y - y(USI01))² > 0.01)');
    ggbApplet.evalCommand('USIVECTOR = Vector(USI00,USI01)');
    ggbApplet.evalCommand('refList = IterationList(Element(Remove({Intersect(' + ellipseName + ', Ray(Reflect(α, Tangent(β, ' + ellipseName + ')), β))}, {β}), 1), α, β, {USI01, Element(RemoveUndefined({Intersect(' + ellipseName + ', Ray(USI01, Vector(USI00, USI01)))}), 1)}, ' + reflectionTime + ')');
    ggbApplet.evalCommand('refPolyLine = PolyLine(Join({{USI00}, IterationList(Element(Remove({Intersect(' + ellipseName + ', Ray(Reflect(α, Tangent(β, ' + ellipseName + ')), β))}, {β}), 1), α, β, {USI01, Element(RemoveUndefined({Intersect(' + ellipseName + ', Ray(USI01, Vector(USI00, USI01)))}), 1)}, ' + reflectionTime + ')}))');
}

楕円の名前、反射回数を指定するだけで、光線反射を描画できます。

 

関数使用例

 

Iteration光線反射 – GeoGebra

 

 

楕円光線反射_自動ver – GeoGebra