うしブログ

うしブログ

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

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

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

球面三角形

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)