うしブログ

うしブログ

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

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

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

2つの円の両方に接する円

「2つの円の両方に接する円」は、赤と青の2種類ある。

赤は「片方の円に内接し、かつもう片方の円に外接する」円。中心の軌道は楕円のようだ。

青は「両方の円に内接する、または両方の円に外接する」円。中心の軌道は双曲線のようだ。

 

円錐を転がす動きの描画

 

円錐を転がす_軽量版 – GeoGebra

参考:主要なオブジェクトの定義式

詳細は上記アプレットを参照ください。

 

円錐

Rotate(Cone( (slantHeight - radius² / slantHeight, 0, radius sqrt(slantHeight² - radius²) / slantHeight ), (0, 0, 0), radius), rotation, z軸)

 

円錐の一部(まだ転がっていない部分)

Surface(β x( Center + V_{sin} sin(α) + V_{cos} cos(α) ), β y( Center + V_{sin} sin(α) + V_{cos} cos(α) ), β z( Center + V_{sin} sin(α) + V_{cos} cos(α) ), α, Mod(slantHeight rotation / radius, 2π), 2π, β, 0, 1)

Surface( <Curve>, <Angle>, <Line>) を使った方が楽と気づき改良↓

Surface(Segment( (0, 0, 0), Contact ), 2π - Mod(slantHeight rotation / radius, 2π), Line( (0, 0, 0), Center) )

 

球面三角形

Twitter界隈で流行っていたので挑戦。

課題

単位球面(中心O)の表面上に、異なる3点A,B,Cをとる。

球面三角形ABCを、Surfaceコマンドで描画したい。

 

方針

まずは、球面三角形の辺ABを、パラメータt(0〜1)を使って表現することから。

Surfaceコマンドの癖に配慮して、AngleやRotateといったコマンド使用は避け、組み込み関数で代用していく。



同様に、辺BCを、パラメータu(0〜1)を使って表現。

 

組み合わせる。

 

あとは、Surfaceの構文の1つである

Surface( <式>, <式>, <式>, <媒介変数1>, <開始値>, <終了値>, <媒介変数2>, <開始値>, <終了値> )

を使って終了。

 

上記方針で作成した場合、球面三角形ABCの、GeoGebraでの定義式はこうなる。

Surface(x((A*cos(t*acosd(A (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B))))+sin(t*acosd(A (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B))))*(A ⊗ (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B)) ⊗ A) / abs(A ⊗ (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B)) ⊗ A))),y((A*cos(t*acosd(A (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B))))+sin(t*acosd(A (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B))))*(A ⊗ (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B)) ⊗ A) / abs(A ⊗ (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B)) ⊗ A))),z((A*cos(t*acosd(A (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B))))+sin(t*acosd(A (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B))))*(A ⊗ (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B)) ⊗ A) / abs(A ⊗ (B*cos(u*acosd(B C))+sin(u*acosd(B C))*(B ⊗ C ⊗ B) / abs(B ⊗ C ⊗ B)) ⊗ A))),t,0,1,u,0,1)

 

……もうちょいシンプルにできないものだろうか??

 

なお、Surfaceを使わない方が、よほど簡単。

Sequence(CircularArc((0, 0), Point(CircularArc((0, 0), A, B), t), Point(CircularArc((0, 0), A, C), t)), t, 0, 1, 0.01)