<二次曲線の接線の汎用アルゴリズム>
ここで対象とするのは、2次曲線の2つです。
2次曲線とは楕円(円を含む)、放物線、双曲線の3つです。
点は、2次曲線の軌道上の点または二次曲線の外にあります。
点の位置が、これ以外だと接線は引けません。
ここで解説する方法では、傾いた二次曲線にも適用できます。
gr0001.png
gr0002.png
gr0003.png
楕円
放物線
双曲線
●軌道上の点に対しては、常に接線が引けます。
●軌道の外の点に対しては、点の位置によって接線が引ける場合と引けない場
合があります。放物線、双曲線に関しても、内側外側が定義できます。
gr0004.png
gr0005.png
I
.
E
.
点Iから接線が引けない
点Eから接線が引ける
gr0006.png
gr0007.png
傾いた楕円
傾いた放物線
汎用2次曲線の方程式は一般的に次のように書けます。
接線を求める関数tangent_of_ellipseは以下のように代入定義で使います。
ただしwinとはシステム関数get_window_handle関数の値です。
tangent_of_ellipse関数の出力は4つの値です。以下で説明するa1,a2,b1,b2
です。
接線は1つまたは2つです。
かつ接線は、y軸に平行な時も有ります。
y=mx+c
このような直線の式とは限りません。従って、次の2つの式を仮定しま
す。
a1,a2,b1,b2の値は0があり得ます。
y軸の平行な直線の時は、b1,b2の
いずれかが0になります。
さらにこの直線の式の描画は、2次元関数グラフの「陰関数型」を使います。
*************** 楕円 **************
以下は楕円の標準的ケースです。
関数定義
2次曲線の式
代入定義
●ノーマルケース
代入定義で点の位置を決定します。
分数モード
実演デモ ⇒
動画1
垂線型
分数モード
ちなみに
実演デモ ⇒
動画2
接線なし
分数モード
動画3
実演デモ ⇒
水平型
分数モード
動画4
実演デモ ⇒
軌道上の接線
分数モード
動画5
実演デモ ⇒
傾いた楕円
分数モード
動画6
実演デモ ⇒
*************** 放物線 **************
ノーマル型
放物線の外の点の座標を以下とします。
分数モード
動画7
実演デモ ⇒
水平型
分数モード
接線型
分数モード
*************** 双曲線 **************
●ノーマル型
分数モード
動画8
実演デモ ⇒
垂線型
分数モード
双曲線接線なしのケース
分数モード
傾いた双曲線
分数モード
以下は特に興味のある方を対象としていますので読み飛ばして結構です。
***********************************************************
tangent_of_ellipse関数の解説
カルキングスクリプトの原則
(1)スクリプトでは、直接に代数計算代数代入はできません。
  あくまでもスクリプトでは数値計算が原則です。
(2)カルキングの文字列計算は、数値計算に分類されています。
●カルキンングには数式を文字列にした文字列数式を計算(代数モードを含めて)
するシステム関数があります。下で示すtangent_of_ellipse関数やget_discrim関数
ではsymbolic_calculus関数、symbolic_assign関数、numeric_calculus関数等が
使われていますが、これらが文字列数式を入力として、計算して、結果を文字列ま
たは数値として出力します。これらの関数の名前はキーボードからの入力ではなく
拡張数学関数ツールバーから入力します。これらの関数はスクリプトの中でのみ
利用可能です。
winはすでに説明したget_window_handle関数の実行結果の値です。
このブロックを実行して、nの値を調べると以下になります。
●discriminant関数は、2次方程式の判別式を計算します。
●get_degree関数は多項式の次数を求める関数です。
●solve_string関数は、方程式を文字列で与えて解を文字列で返す関数です。、
以上