うしブログ

うしブログ

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

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

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

PointLineへの憧れ

はじめに

本記事の内容は、動的幾何学ソフト「PointLine」に触発されて得られた知見に基づいています。下記にPointLineへのリンクを掲載し、謝意を表します。

aharalab.sakura.ne.jp

PointLineにおける点オブジェクトは、すべてがGeoGebraでいう「自由オブジェクト」であり、原則としてどの点でも動かすことができる。そして、点を動かした際の、他の点の挙動は、とても独特であり、しかしながら不規則という訳でもなく、非常に魅力的な動きをする。

本記事は、PointLineにおける点の挙動を、GeoGebraの視点から理解・説明しようという試みである。

※長期企画になります。分かるところから書き、随時増やしていきます。

 

円の中心と、円上の点

補助オブジェクト:C,D(自由な点)

 

AのOn Update スクリプト

SetValue[B,B+(UnitVector[Vector[C, B]] x(ExtendedAffineRatio[C, B, A] Distance[C, B]))/2]
SetValue[C,A]
SetValue[D,B]

 

BのOn Update スクリプト

SetValue[A,A+(UnitVector[Vector[D, A]] x(ExtendedAffineRatio[D, A, B] Distance[D, A]))/2]
SetValue[C,A]
SetValue[D,B]

※直感的説明:差分のベクトルのうち、「相手の点」成分の1/2のみで、相手の点を押す。 

 

なお、

UnitVector[Vector[C, B]] x(ExtendedAffineRatio[C, B, A] Distance[C, B])

は冗長なので、以下ではこれを

Push[A,B,C]

というオリジナルツールとして標記する。

Push[<始点>, <目標>, <補助点>]

で、「始点が補助点からどれだけ動いたか」を表すベクトルのうち、「補助点→目標」方向の成分のみを抽出する。

 

外接する2つの円の中心

 

補助オブジェクト:C,D(自由な点)

前提オブジェクト:diff(2つの円の半径の差分;固定値)

 

円Aの定義

Circle[A, (Distance[A, B] + diff) / 2]

 

円Bの定義

Circle[B, (Distance[A, B] - diff) / 2]

 

Aのスクリプト

If[Distance[A,B]>diff,SetValue[B,B+Push[A,B,C]/3],SetValue[B,B+Push[A,B,C]]]
SetValue[C,A]
SetValue[D,B]

 

Bのスクリプト

If[Distance[A,B]>diff,SetValue[A,A+Push[B,A,D]/3],SetValue[A,A+Push[B,A,D]]]
SetValue[C,A]
SetValue[D,B]

 

※直感的説明:AB間の距離がdiffより大きい場合→差分のベクトルのうち、「相手の点」成分の1/3倍のみで、相手の点を押す。

AB間の距離がdiff以下になった場合→差分のベクトルのうち、「相手の点」成分の1倍で、相手の点を押す。