2020年3月7日土曜日

JavaScript : 傾く放物線の描きかた

この前、曲線の平行移動は比較的簡単に操作できましたけれど、
曲線の回転移動となると、ちょっと難しそうです。

それを簡単にしてしまう方法が、ペン軸そのものの回転です。

 操作方法は本当に簡単で、たとえば、
◈ yx2 + 1
という 2 次関数の方程式の曲線を傾けて描きたいなら、回転移動の中心点にペンの基準点を平行移動させてから、ペン軸を回転して、あとは通常の手順で、細切れのラインを連続して描けばよいのです。
 描線後は、まずペン軸の回転をもとに戻してから、最後にペンの平行移動をもとに戻します。
// rad = radian, g = grid pixel
var cvs = document.getElementById('sample_canvas');
var pen = cvs.getContext('2d');
var rad = Math.PI/10;
var g = 50;
  // Canvas の中心にペン軸を移動させる
  pen.translate(cvs.width/2, cvs.height/2);
  // ペン軸を回転させる
  pen.rotate(rad);
  // 放物線を描線する
  pen.beginPath();
  pen.moveTo(-2*g, -5*g);
  for (var i=-1.9; i<=2.1; i+=0.1) {
    pen.lineTo(i*g, -(i*i+1)*g);
  }
  pen.stroke();
  // ペン軸の回転を戻す
  pen.rotate(-rad);
  // Canvas の左上にペン軸の基準点を戻す
  pen.translate(-cvs.width/2, -cvs.height/2);
 暫定的な接線も、この方法で同時にまた同様に、描くことができます。
 しかしながらこの手順では、曲線上の座標の数値がわからなくなるという問題が残ってしまいますので、ペン軸の回転を使わず、計算式による手順を構築して、曲線の回転移動を実現してみたいと思ったのです。
// dx = 回転後の x 座標, dy = 回転後の y 座標
var theta = 角度 °;
var x = 基本の x 座標;
var y = -(x*x + 1);
var r = Math.sqrt(x*x + y*y);
var deg = Math.atan2(y, x) * 180/Math.PI;
   deg += theta;
var dx = r * Math.cos(deg * Math.PI/180);
var dy = r * Math.sin(deg * Math.PI/180);
  document.getElementById('y_parabola').innerHTML = -Math.round(y * 100)/100;
  document.getElementById('para_x').innerHTML = Math.round(dx * Math.pow(10, 5))/Math.pow(10, 5);
  document.getElementById('para_y').innerHTML = -Math.round(dy * Math.pow(10, 5))/Math.pow(10, 5);
  pen.translate(cvs.width/2, cvs.height/2);
  // 放物線を描線する
  pen.strokeStyle = 'orangered';
  pen.lineWidth = 1;
  pen.beginPath();
  x = -2.4;
  y = -(x*x + 1);
  r = Math.sqrt(x*x + y*y);
  deg = Math.atan2(y, x) * 180/Math.PI;
  deg += theta;
  dx = r * Math.cos(deg * Math.PI/180);
  dy = r * Math.sin(deg * Math.PI/180);
  pen.moveTo(dx*g, dy*g);
  for (i=-2.3; i<2.5; i+=0.1) {
    x = i;
    y = -(x*x + 1);
    r = Math.sqrt(x*x + y*y);
    deg = Math.atan2(y, x) * 180/Math.PI;
    deg += theta;
    dx = r * Math.cos(deg * Math.PI/180);
    dy = r * Math.sin(deg * Math.PI/180);
    pen.lineTo(dx*g, dy*g);
  }
  pen.stroke();
  pen.translate(-cvs.width/2, -cvs.height/2);
test Canvas 回転する放物線
回転角度を変更: 角度 = °
基本の x 座標 :
基本の y 座標 : yx2 + 1
▣ 回転する x 座標 :
▣ 回転する y 座標 :

2020年3月5日木曜日

JavaScript 円の接線の計算

 まず、直角に交差するふたつの直線の傾きについて。
 それから JavaScript での、エラーを含んだ、サイン・コサインの計算結果の表示。
 最後に円の接線の方程式と、JavaScript を使った円の接線の計算。
▶ それぞれ傾き m1m2 のふたつの直線が、垂直に交わるときには、次の条件が成り立ちます。
● m1 × m2 = - 1
 直交する直線の、傾き同士を掛け合わせると、答えはマイナス 1 になるのです。
● m2 = - 1 ÷ m1
  m1y ÷ x
▣ m2 = - x ÷ y
JavaScript : サイン・コサイン・円の接線の計算
 ◈ 前回見たグラフで確認できたように、サイン曲線とコサイン曲線はちょうど 90 度分ずれています。
▣ cosθ = sin (90° + θ )
 ◈ また、座標位置を求める三角関数の特徴として、次のことがありました。
〔※ ぞれぞれ x 軸、y 軸の座標を示す次の式は、r = 1 とすれば、r は省略可能。〕
● r × cosθ = r × sin (90° - θ )
● r × sinθ = r × cos (90° - θ )
 ◈ 以上のことから、次の式が導かれます。
▣ cosθ = sin (90° + θ ) = sin (90° - θ )

 ◈ このことは、《サインカーブ・コサインカーブ》のグラフでも、90 度と 270 度の位置を中心にして、曲線のラインが対称形(線対称)になっていることからも見てとれます。

 ✥ JavaScript によるサイン・コサインの計算
(「 ▸ cos の前の ボックス」で数字を選択)
°   ▸  cos 1 ° =  
°   ▸  sin 91 ° =  
°   ▸  sin 89 ° =  

⛞ とりあえず円の中心点と円周上の点 P を結ぶ半径を引いてから、点 P を起点として(その両サイドの方向に)、半径に直角な線を引いていくと、接線となっているわけです。

 ✥ JavaScript による円の接線の計算
⛞ それはそれとして、点 O ( x1 , y1 ) を中心とする円の、円周上の点 P ( x2 , y2 ) を通る、直線接線の方程式を求める準備はすでに、これまでの学びで整っている状態であります。
 ◎ [ x0 = x2 x1 ] とし、同様に [ y0 = y2 y1 ] として、簡潔な方程式で計算式を表現します。
 ◎ また、直線 OP の傾きを [ m1 = tan θ ] 、接線の傾きを [ m2 ] とします(※ m1 m2 = - 1 )。
m1 = ( y0 ∕   x0 ) = tan θ
b1 = y1 - ( m1 * x1 )
▣ y = m1 * x + b1
m2 = - ( x0 ∕  y0 )
b2 = y2 - ( m2 * x2 )
▣ y = m2 * x + b2
 ( x1 =   ,  y1 = )
 ( x2 =   ,  y2 = )
◈ y = m1 * + b1 ≒  
◈ y = m2 * + b2 ≒  
▣ x0 = x2 - x1  = 
▣ y0 = y2 - y1  = 
▣ θ = Math.atan2(y0, x0) ≒  °
▣ tan θ = Math.tan θ ≒ 
▣ m1 =  y0 / x0  ≒ 
▣ m2 = - x0 / y0 ≒ 
▣ b1 =  y1 - ( m1 * x1 ) ≒ 
▣ b2 =  y2 - ( m2 * x2 ) ≒ 

2020年3月2日月曜日

サイン曲線・コサイン曲線の傾きと接線

 円の接線については、中学で習います。


 円 O の円周上の点 P を通る、半径 OP に垂直な直線 m を引きます。そのとき、円 O の円周と直線 m は、1 つの点 P だけを共有します。
 反対に、円 O と直線 m が、円周上の 1 つの点 P だけを共有するとき、半径 OP は直線 m と垂直になります。
 これが、円の接線になります。
 円の接線は、三角関数を使って計算できます。
 下のグラフを操作してみれば確認できるようにグラフの形は同じで、サインの値は、コサインの値と 90 度ずれているだけです。
 つまり、サイン曲線の値は、コサインの角度に 90 度を足したときの値になっています。

 その他の曲線の接線は、少しややこしくなります。


 とある曲線と直線が、ある 1 点だけを共有する場合、その直線はその曲線の接線になります
 このとき「ある 1 点だけを共有する」というのは、「曲線の 2 点間を結んだ直線のその 2 点間の距離が 0 になった状態」をさしています。
 ですから、簡単にいって、その曲線の 2 点間を結んだ直線は、接線とは呼ばれません。

 しかしながら、たとえば円を描く際に 1 度刻みの角度で、まっすぐな線をつなげて描いたなら、それはほぼというか、まったくもって、円に見えることでしょう。
 そういうわけで、もし仮に曲線を表示する場合に、1 度刻みで引いた線分をつなげてその曲線を描いていて、そこでそのそれぞれ、各々の線分の両端を無制限に延長してみたなら、一見して、それが曲線の接線とイメージされることもありましょう。

 それは接線のように見えるので、暫定的に、接線とみなしてもよいように思われます。
 実際のところ、いずれにせよ数学上の計算には誤差はつきもので、三角関数だっていわば暫定的な数値なのですし。
 とはいっても、やはり誤差はできるだけ少なくしていく方向で考えるべきでしょう。
(暫定的ではない曲線の接線は、微分を使って計算するようです。)

 今回は、その座標位置における前後 0.1 度ずつの値を結ぶ線分を仮定して、3000 倍に延長してみます。
 ※ たとえば、180 度の位置なら、179.9 度と 180.1 度の値を結ぶ線分の延長になります。
※※ 今回は、暫定的に
それをその曲線の接線とみなしておくわけです。
  ◈ サインカーブ・コサインカーブと暫定接線 ◈
 sin ° = 0  cos ° = -1



―― コピペしてそのまま使える、JavaScript の見本をテキスト化して掲載したページを、前回と同じサイトで公開しています。

「三角関数のグラフと曲線の傾き」
《サインカーブ・コサインカーブ・タンジェントの漸近線》
http://theendoftakechan.web.fc2.com/eII/hitsuge/arcus/parabola.html#gradient

JavaScript : 双曲線と放物線
http://theendoftakechan.web.fc2.com/eII/hitsuge/arcus/parabola.html

2020年2月29日土曜日

放物線あるいは n 次曲線を描く

 双曲線 (hyperbola) は、1 次関数のグラフです。
 放物線 (parabola) は、2 次関数のグラフになります。

 基本的な放物線のグラフと、その他の n 次関数曲線を、試しに描いてみました。
 関数の選択ボタンで、グラフ表示が切り替え可能となっています。


  n 次式のグラフ
  ▣ a = 
  ▣ n = 
y = axn の頂点の座標 (p, q)
  ▣ p = 
  ▣ q = 
  関数の選択
  y = axn
  y = a ( x - p )n + q
  y = x3 + x2 + x
  y = x3 - x2 - x

 ◈ y = a ( xp )2q の計算式。
 ▣ y = a ( xp )2q = ax2 - 2apxap2q
 ここで
b = - 2ap
c = ap2q
 と代入すれば
y = ax2bxc
▣ p = - b
 
  2a  
▣ q =  c -  b2  =     4acb2  
   
  4a     4a  
 となって y = ax2bxc は y = ax2 を
 x 方向に p y 方向に q だけ、平行移動させたグラフ
になるわけです。


―― 例によって、コピペしてそのまま使える、JavaScript の見本をテキスト化して掲載したページを、以下のサイトで公開しています。

JavaScript : 双曲線と放物線
http://theendoftakechan.web.fc2.com/eII/hitsuge/arcus/parabola.html

2020年2月26日水曜日

アルキメデスの円周率の計算

 このたびは、昨年「円積曲線(円積線)の作図と操作」(2019年9月29日日曜日)で、
〈ヒッピアスの円積曲線〉なるものを紹介して以来の、その続きの話となります。

 紀元前 3 世紀の頃に生きていたというアルキメデスは、円周率をかなり正確に計算していましたが、じつはその計算過程をこのページ上で再現しようとして、うまい方法を思いつけぬままに数ヶ月が経過してしまいました。

実際にとりかかってみると、そもそもがけっこう複雑な方法なので、
説明文を節約しようとしても、かなりの無理が避けられないというわけで、
その結果、この文末でもリンクしているページ「多角形と円周率の話」の

〈アルキメデスの円周率の計算〉
http://theendoftakechan.web.fc2.com/eII/hitsuge/arcus/polygon.html#archimedes

を参照していただくことといたします。

 アルキメデスが書き残したとされる円周率計算解説〈円の計測〉の日本語訳文は、
『世界の名著 9』 ギリシアの科学〔昭和47年02月10日 中央公論社/発行〕所収の、
三田博雄訳「アルキメデスの科学」で、確認することができます。

 今回ここでは、その円周率の計算に必要となってくる、
《円に内接もしくは外接する多角形》の「辺の長さの合計計算」を少しばかり、
作図して、計算してみましょう。

多角形と円周率の計算概要作図


◈ 多角形の辺の長さを円周〔率〕に近似させる ◈


 ✥ 円周率は、円周の長さとその直径との比であり、また円の面積と半径の平方との比率でもあります。
 正方形に内接する円の直径は正方形の 1 辺の長さと同じなので、円周率というのは、多少表現を変えて説明すると、正方形の 4 辺の長さの合計を 4 としたときの、内接円の円周の値になります。

 円の半径が r = 1 の円周の値と、それに外接・内接する正多角形の辺の長さを比較してみましょう。
 円に外接する正 n 角形も、内接する正 n 角形も、辺の長さの合計はどちらも、n の数が多くなるにしたがって、円周率の 2 倍の値となる円周の数値に近づいていきます。

  ✥ 円の半径が r = 1 の円周は  [ 2π = 6.28 ]

  正三角形      正方形 
  正六角形      正十二角形(補助線つき)
  正 角形(内接多角形のみ)
 ⛞ 
● 円に内接する多角形の 1 辺の長さ
 =  2 
多角形の辺の長さの合計
▸  ×
 = 
● 円に外接する多角形の 1 辺の長さ
 2
多角形の辺の長さの合計
▸  ×
 = 


  辺の長さの計算方法について。
⛞ 正三角形
▶ 図示したように、円に内接する正三角形の頂点の座標のひとつを P (px, py) としたとき、内接する正三角形の 1 辺の長さは px の値の 2 倍になります。
 また、円に内接する正三角形と、外接する正三角形の辺の長さの比は、円に内接する正三角形にさらに内接する円の半径 py と、もとの円の半径 r との比に等しいので、円に外接する正三角形の 1 辺の長さの半分を、仮に qx とするならば、
qx : px = r : py   [ qxpx = rpy ]
qx = px × rpy   [ r = 1 ]
 ∴  qx = pxpy
となって、外接する正三角形の 1 辺の長さは、2 × pxpy と算出されるわけです。
⛞ 正方形(正四角形)
▶ 説明は、省略します。
⛞ 正六角形 (正六角形の辺の長さの計算のもう少し詳しい説明箇所へのリンク
▶ リンクしたページで、アルキメデスの〈円の計測〉の解説に基づいて、説明しています
⛞ 正十二角形
▶ 正 12 角形のひとつの辺を挟む中心からの角度は、360 (°)  ∕ 12 = 30 (°) = π ∕ 6 (rad) なので、そのさらに半分は π ∕ 12 となります。
► 図からわかるように、π ∕ 12 の角度をもつ直角三角形を想定したとき、円に内接する正 12 角形のひとつの辺の長さは、[ r * Math.sin(Math.PI/12) * 2 ] で計算することができます。
► 図では少しわかりにくいのですが、円に外接する正 12 角形の辺はそれぞれ、円の接線の一部となっているので、辺の中点において円と接していて、その接点と円の中心を結ぶ線分は、当然のことながら、円の半径に一致します。そして円の中心を通ってその接点に向かう直線と、接線とは直角に交差しているので、そこに直角三角形が想定できて、その直角三角形の 1 辺が半径 r〔の長さ〕と一致することになります。
 その直角三角形の斜辺を z と仮定して計算すれば、
z * Math.cos(Math.PI/12) = r
 ∴  z = r ∕ Math.cos(Math.PI/12)
となるので、外接する正 12 角形のひとつの辺の長さは [ 2 * z * Math.sin(Math.PI/12) ] と、なるわけです。

◆ JavaScript での書式(具体的な書き方)などは、リンクしたページで、実際のスクリプトを参照してみてください。

―― 昨年 9 月の前回分と合わせ、コピペしてそのまま使える、JavaScript の見本をテキスト化して掲載したページを、すでに説明したところの、以下のサイトで公開しています。

多角形と円周率の話
http://theendoftakechan.web.fc2.com/eII/hitsuge/arcus/polygon.html

2020年1月26日日曜日

JavaScript : ユニコード(拡張 4 バイト漢字)

 ◈ JavaScript による計算方法は、このページのソースを参照してください。

第 1 ポイント 23383 5B57
第 2 ポイント
追加ポイント
ポイント合計 23383 5B57




ユニコード
U+
&#x;
10 進数
&#;

JavaScript : ユニコード拡張 4 バイト漢字( 0x20000 からの一覧表付き)ページ
http://theendoftakechan.web.fc2.com/eII/tottori/unicode.html

2019年9月29日日曜日

円積曲線(円積線)の作図と操作

 さて、古代のギリシャに発生した円正方化問題が遠く日の本の国では《円積問題》と広く呼称されている由縁は古来日本に《円積法》と呼ばれる〈円の面積の計算方法〉が和算家の間に普及しておりそれにともなって《円積率》もまた精度の高いものが使用されていた次第によると考えられるのでした。
 タイトルにある《円積曲線》というのは、《円積問題》の解決に深く関わるとされたゆえの名称らしいのですけれど、ここらで〈円積〉の概念に混乱が生じてまいります。混乱の個人的な現象としては過去形なので、つまりはまいったのです。

 ◯ 辞典など繙いてみましょう。多く語られていたり語られていなかったり、はたまた語句そのものが項目として採用されていなかったり。ちなみに小学館発行の『日本国語大辞典 第二版』には、【円積(えんせき)】は「円の面積」と説明されていました。


『広辞苑 第四版』

さんだいもんだい【三大問題】

〔数〕古代ギリシアの幾何学における作図の問題。角の三等分、立方倍積問題、円積問題の三つ。いずれも定規とコンパスだけでは作図不能。

えんせきもんだい【円積問題】

与えられた円と同面積の正方形を作図する問題。古代ギリシアの幾何学三大問題の一。一八八二年にリンデマン (C.Lindemann 1852~1939) が作図不能を証明。円正方化問題。


『算数・数学用語辞典』

武藤徹[むとう・とおる] 三浦基弘[みうら・もとひろ] /著
2010年06月30日 東京堂出版/発行
 (pp. 22-24)
えん [circle]
 コンパスで描いた曲線が囲む平面の一部を円といいます。また、この曲線を、この円の周といいます。円の周の一部を弧といいます。
 コンパスを使わない一般的な定義は次のようになります。
 平面上の 1 点 O から等距離にある点は、1 つの曲線を描きます。この曲線の囲む平面の 1 部を円といい、点 O を、この円の中心といます。また、この曲線を円周といいます。
 円の中心と円周上の点を結ぶ線分を、半径といいます。また、円周上の 2 点を結ぶ線分を弦といいます。長さが最大の弦を直径といいます。円の直径は、円の中心を通ります。
 円の弦は、円周を 2 つの部分に分けますが、大きい方を優弧、小さい方を劣弧といいます。あわせて、単に弧といいます。

円周 えんしゅう [circumference]
 円を囲んでいる曲線を、円周といいます。
 円を放物線や双曲線の仲間と考えて、円周のことを円と呼ぶこともあります。天体の円軌道というのは、その例です。このときは、円は曲線となり、面積を持たないことになります。

円周率 えんしゅうりつ [ratio of circumference of circle to its diameter]
 円周の長さと直径の長さとの比を円周率といいます。円周率は、回りを表すギリシャ語ペリフェレイア (περιφέρεια) の頭文字をとって、π(パイ)で表します。
 π = 3.1415926535897932384 …
が知られています。計算機の進歩によって、現在、その値は 2 兆桁を超えて計算されています。

円積問題 えんせきもんだい [quadrature of circle]
 与えられた円と等しい面積を持つ正方形を、定規とコンパスを有限回使うだけで作図せよ、という問題です。

円積率 えんせきりつ [ratio of area of circle to its circumscribed square]
 円と外接正方形との面積比を、円積率といいます。
π / 4 = 0.7853981 …となります。
古代エジプトでは、円の面積を、直径からその 9 分の 1 を引いて平方して求めました。
直径 9 の円の場合、円の面積 8 × 8 = 64 、この円を囲む正方形の面積は 9 × 9 = 81 ですから
円積率は 64 / 81 = 0.790123456 …で、現在との誤差は 0.60% でした。
 和算家吉田光由の『塵劫記 [じんこうき] 』では、円積率 0.79 が用いられています。


『算数・数学活用事典』

武藤徹[むとう・とおる] 三浦基弘[みうら・もとひろ] /著
2014年09月25日 日本評論社/発行

4 章 幾何の誕生

 (p. 72)

エリスのヒッピアス [Hippias (前 460 ? ~ ? )]

 けばけばしい紫の衣を身に着けて現れ、指輪をはじめ身に付けているものは、全部、自分で作ったといったことで有名です。彼は円積曲線 [えんせききょくせん] (quadratrix) を利用して任意の角の 3 等分に成功しました。
 エリスのヒッピアスは、任意の角の 3 等分を実現するために、右図のように、正方形の 1 辺を、2 等分、4 等分、8 等分、… し、また、直角を、2 等分、4 等分、8 等分、… して、それらの線分の交点の描く曲線を利用すると、任意の角に対応する辺を 3 等分するとき、対応する任意の角が 3 等分されることを発見しました。
 この曲線は、後に、円積問題の解決に役立つことが分かり、円積曲線と呼ばれることになりました。


☝ 上記の引用文中にある「右図」が、☟ おおよそ下の「図 1」の右半分に該当します。


✥ ヒッピアスの円積曲線 ✥

τετραγωνίζουσα

● 四角形 ABCD は正方形で、PD の曲線が、円積曲線にあたる。
〔 ※ 右回転が角度のプラス、左回転がマイナスの角度になっています。図 1 では、角度 0 度は、AD のラインに一致。〕

角度 °  1  2

✍ 辺 AB = AD の長さを基準として、角度の変更に応じて、

 45° で半分、
 30° で 3 分の 1 、
 60° で 3 分の 2 の割合等々で、

辺を分割するラインが移動し、交点座標の変化が確認できます。