うしブログ

うしブログ

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

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

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

AffineRatioとDilateを拡張する

AffineRatioの拡張

定義

AffineRatioを拡張して、オリジナルコマンド「ExtendedAffineRatio」を作成した。

その定義は、以下の通りである。

ExtendedAffineRatio[A,B,C]

= (AffineRatio[A, B, Intersect[PerpendicularLine[C, Segment[A, B]], Line[A, B]]], Vector[A, B] ⊗ Vector[Intersect[PerpendicularLine[C, Segment[A, B]], Line[A, B]], C] / Distance[A, B]²)

あるいは、より簡単には、

ratioX = (B - A) (C - A) / (B - A)²

ratioY = (B - A) ( ( {{0, 1}, {-1, 0}} (C - A) ) ) / (B - A)²

ExtendedAffineRatioのggtファイルは、下記リンクよりDL可能である。

ExtendedAffineRatio Tool - GeoGebra

 

※より簡単な定義の方を用いたバージョン

拡張AffineRatio_単純定義版 - GeoGebra

 

解説

AffineRatio[A,B,C]は、点Cが線分AB上に存在する場合に限って、値を返す(上掲アプレット参照)。

ExtendedAffineRatio[A,B,C]は、点Cが線分AB上にない場合にも、値(点オブジェクト)を返すようにしている。その点オブジェクトのx座標は、点Cから線分ABに下ろした垂線の足をHとしたとき、AffineRatio[A,B,H]によって得られる値と等しくなるようにしている。

また、y座標は、直線ABをx軸(正の方向は、Vector[A,B]が示す方向。線分ABの長さをもって、長さ1とする。)とみなして、右手系でy軸をとった場合における、点Cのy座標を表している。

このように、ExtendedAffineRatio[A,B,C]は、AffineRatio[A,B,C]を、線分ABに垂直な方向にも拡張したものである。

 

 Dilateの拡張

定義

AffineRatio[A,B,C]は、2点A,Bを基準として、点Cの位置を表現するものである。これに対して、Dilate[B,α,A]は、2点A,Bを基準として、AffineRatioがαであるような点を返すコマンドである。このように、AffineRatioとDilateは、いわば逆関数の関係にある。

これに対応して、ExtendedAffineRatio[A,B,C]と逆の処理を行う、ExtendedDilateも定義可能である。

ExtendedDilate[B,ratioX,ratioY,A]
= Dilate[Translate[Rotate[B, π / 2, A], Vector[A, Dilate[B, ratioX, A]]], ratioY, Dilate[B, ratioX, A]]

=A + ratioX (B - A) + ( ratioY {{0, -1}, {1, 0}} (B - A) )・・・より簡単な定義

 

ExtendedDilate Tool - GeoGebra

 

※より簡単な定義の方を用いたバージョン

拡張Dilate_単純定義版 - GeoGebra

 

解説

ExtendedAffineRatio[A,B,C] = (α, β) であるとき、

ExtendedDilate[B,α,β,A]

は、点Cと一致する。

たとえば、A=(1,0), B=(1,4), C=(-1,3)のとき、

ExtendedAffineRatio[A,B,C] = (0.75,0.5)

である。

そこで、

ExtendedDilate[B,0.75,0.5,A]

を実行すると、点Cと同じ位置に、点が作成される。

f:id:usiblog:20190322031329p:plain