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
※より簡単な定義の方を用いたバージョン
解説
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と同じ位置に、点が作成される。