うしブログ

うしブログ

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

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

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

透過率0%の多角形の扱いに関する仕様変更に手が震える

私が現在PCにインストールしているGeoGebraは、バージョン5.0.42.0です。

そして、2017年2月9日現在リリースされているGeoGebraの最新バージョンは、バージョン5.0.326.0です*1

私がぼけっとしている間に、もの凄い数のマイナーアップデートが行われており、ちゃんと情報をフォローしておかないといけないな、と痛感しております。

さて、マイナーアップデートとはいえ、古いバージョンを使用していることの弊害は、アプレットをアップロードしてブラウザ上で動かした場合に顕在化します。

 

「あれっ、PC上では こう動いていたのに、ブラウザ上では 違う挙動をするぞ...??」

 

せっかく一生懸命作ったアプレットも、いざアップロードしてブログに埋め込んで公開したら、ぜんぜん思い通りに動かない、という事態が起こります。

 

透過率0%の多角形の扱い(2017/2/9現在ブラウザ版)

2017年2月9日現在、ブラウザ版GeoGebraにおいては、透過率0%の多角形は、非表示と同様の扱いになっております。

透過率5%の場合

f:id:usiblog:20170209142207g:plain

三角形poly1の下に回り込んでいる点Dは、poly1よりもレイヤーが下であるため、poly1の上からドラッグすることはできません。

f:id:usiblog:20170208232405p:plain最新のブラウザ版GeoGebraで見る

透過率0%の場合

f:id:usiblog:20170209142857g:plain

三角形poly1の透過率を0%にすると、poly1の上から点Dをドラッグすることが可能になります。つまり、poly1が非表示になっている場合と同様の挙動となります。

f:id:usiblog:20170208232405p:plain最新のブラウザ版GeoGebraで見る

透過率0%の多角形の扱い(バージョン5.0.42.0)

f:id:usiblog:20170209143651g:plain

古いバージョンでは、透過率0%であっても、表示はされていました。このため、「透過率が0%のため見えないけれど、そこに存在する」オブジェクトを作成することが可能でした。

特に、画面いっぱいの長方形Poligon[Corner[1],Corner[2],Corner[3],Corner[4]]は、透過率0%・レイヤー9で作成することで、ユーザーの誤操作を防止するために重宝してきました。

しかし、GeoGebraの仕様変更により、この方法は使えなくなってしまいました。

反省とまとめ

今まで作成してきたすべてのGeoGebraアプレットに対して、こうした細かい仕様変更の影響が及んでいると考えると、ぞっとして手が震えます。ひょっとしたらブラウザ上で全く動かなくなってしまっているアプレットもあるかもしれません。

震えていても仕方がないので、今後は、作成したアプレットが最新版GeoGebraでどのように動くか、定期的に点検を行い、不具合があればその都度修正するように注意しようと思います。

そして、どのバージョンで動作確認をしたかという情報も、明記するようにします。

考えてみれば、アプレット制作者が当然行うべき仕事ですね。またひとつ勉強になりました。

GeoGebraで回転体(に見えるモノ)を作る方法

(2022年9月3日追記)

Surface( <オブジェクト>, <角度>, <軸>)

という構文によって、回転体(厳密には回転体の表面を表す曲面)を描画することが可能となりました。例えば

Surface(poly1,2 π,z軸)

のように使います。

 

(以下、2017年2月8日当時の記事です。)

 

GeoGebraで回転体を作る方法は、私が現在知っている限りでは存在しません

しかし、回転体に見えるオブジェクトを作る方法はあります。

ここでは、Poly1Polygon[(1, 0, 0), (2, 0, 0), (2, 0, 1), (1, 0, 1)]をz軸を中心に回転してできる立体に見えるオブジェクトを作成する方法を紹介します。

1:Rotateコマンドと残像を用いる方法

f:id:usiblog:20170208231443p:plain

f:id:usiblog:20170208232405p:plainRotateコマンドを用いた回転体の作成.ggb

作成方法

・数値オブジェクトuを作成する。uは、最小値0、最大値2π、増分0.01、アニメーションの設定「増加(1回)」とする。

Rotate[poly1, u, z軸]を作成し、プロパティから「残像表示」チェックボックスをオンにする。

・uのアニメーションを開始する。

この方法の特徴

・比較的簡単に作成できる。

・正体は回転体ではなく、poly1をz軸まわりに回転させた図形を、ドミノのように大量に並べているだけ。そのため、見た目はあまり良くない。

・あくまで残像なので、ズームしたりビューを平行移動したりすると、描画内容が消去されてしまう。

2:Surfaceコマンドを用いる方法

f:id:usiblog:20170208231518p:plain

f:id:usiblog:20170208232405p:plain Surfaceコマンドを用いた回転体の作成.ggb

作成方法

Surface[If[0 ≤ p  <  1, p + 1, 1 ≤ p  <  2, 2, 2 ≤ p  <  3, 4 - p, 3 ≤ p ≤ 4, 1] cos(q), If[0 ≤ p  <  1, p + 1, 1 ≤ p  <  2, 2, 2 ≤ p  <  3, 4 - p, 3 ≤ p ≤ 4, 1] sin(q), If[0 ≤ p  <  1, 0, 1 ≤ p  <  2, p - 1, 2 ≤ p  <  3, 1, 3 ≤ p ≤ 4, 4 - p], p, 0, 4, q, 0, 2 π ]を作成する。

Surfaceコマンドの使い方の詳細については、後日別稿を書く予定です。

この方法の特徴

・作成方法が煩雑。

・曲面としてなめらかに描画されるため、見た目は綺麗。

・正体は回転体ではなく、あくまで曲面。中身は空っぽであり、Volumeコマンドで体積を求めることもできない。Surfaceコマンドのパラメーターを3つに増やしたようなコマンドがあれば、正真正銘の回転体を作成することができるが、そのようなコマンドは、GeoGebra 5.0には実装されていない。

追記:Sequenceコマンドを用いる方法

フォロワーの方に教えていただいた方法です。

f:id:usiblog:20170209003526p:plain

f:id:usiblog:20170208232405p:plain Sequenceコマンドを用いた回転体の作成.ggb

作成方法

Sequence[Rotate[poly1, (2q)°, z軸], q, 0, 180]を作成する。

この方法の特徴

・比較的簡単に作成できる。

・上記の「Rotateコマンドと残像を用いる方法」と同様に、poly1をz軸まわりに回転させた図形を、ドミノのように大量に並べている。

・残像ではないので、ズームやビューの平行移動をしても描画が消えない。残像よりも描画の負荷が大きい。