kawazu_gkgkのブログ

井の中の蛙が勉強して得たことを記録する.

繰り返し折りによる60度への漸近と差分方程式のz変換

離散システムと繰り返し折りによる30度の作成

ディジタル制御を勉強するため「基礎ディジタル制御」を買った.
とりあえずパラ見した中で漸化式をz変換->逆z変換して差分方程式の解を得る方法がわかりやすく書いてあり,丁度折り紙において帯状の紙をあるアルゴリズムで繰り返し折ると60度の角度が現れる現象が漸化式で表されるの思い出したので,それを練習がてらz変換・逆z変換してみようという試み.

続きを読む

Gitの入門

Gitとりあえず使う用のコマンド表

git status

変更・ステージされたファイルを確認

git log

コミットのログを表示
'q'キーで終了

git log (commit ID)

指定されたハッシュ値のコミット以降のコミットログを表示
他に・・・

  • git log (commit ID A)..(commit ID B)
    (commit ID A)以降~(commit ID B)までのログを表示.
    コミットの指定にはHEAD:最新リビジョン,(commit ID)^:'^'の数だけ前,(commit ID)~(x):(x)個前等も使える

git log -(数)

新しい順に(数)個のコミットログを表示

git log --since="(x) hours "

x時間前までのコミットログを表示

その他時間範囲指定

  • since="(x) minute"
    (x)分前以降のログ
  • --before="(yyyy-mm.dd)"
    sinceと同様.(yyyy-mm.dd)で指定した日付以降のログ表示

git log --pretty=oneline

コミットログを各一行にして表示

git log --pretty=format:"%h %s"

コミットログの表示情報をハッシュ値(%h),各ログの1行目(%s)のみにして表示

git log -C -C -p

ファイル間含む行コピーのあるログを表示

git add (file)

新しいファイル(ファイル名)の追跡を開始
もしくは指定ファイルをステージ

git add -i

git addの対話モード起動

git add -p

git addのパッチモード起動

git diff

ステージされた内容に対する作業ツリー上の差分を表示.
git logと同様の範囲指定が使える.

git diff --cached

リポジトリの内容に対するインデックスの差分を表示.

git diff HEAD

リポジトリの内容に対する変更全ての差分を表示.
HEADは「現在のブランチに対する直近のコミット」という意味

git diff --stat (commit ID)

HEADと指定コミットの差分に関する統計情報表示

git branch

ローカルのブランチをすべて表示

git branch -m (old) (new)

ブランチ名を(old)から(new)に変更
(new)が既に存在しているブランチ名の場合エラーとなる
-Mにすると強制的に変更(すでに存在するブランチ名の場合上書き)

git branch (new)

現在チェックアウトしているブランチを基に新しいブランチ(new)を作成

git branch (new) (original)

既存のブランチ(original)を基に新しいブランチ(new)を作成

git branch -d (branch)

ブランチ(ブランチ名)を削除
ただしチェックアウト中のブランチに完全にマージされていない場合エラーとなる
-Dにすると強制削除

git tag

タグ一覧表示

git tag (tag) (branch/commit ID)

指定ブランチ・コミットの位置にタグ(tag)を打つ

git checkout (branch)

ブランチ(branch)をチェックアウト

git checkout -b (new) (original)

ブランチ作成とチェックアウトを同時に行う

git merge (branch)

チェックアウト中のブランチに(ブランチ名)を直接マージ

git merge --squash (branch)

(ブランチ名)の変更をすべて取出しチェックアウト中のブランチに圧縮マージ
ステージされるのみのため別途コミットが必要

git commit

コミット

git commit -a

gitが追跡しているファイルの変更全てをコミット
コメントを記入するためのエディタが起動する

git commit -m "(comment)"

(comment)をコメントとしてコミットする

git commit -C (commit ID) --amend

ひとつ前のコミットを今のステージ内容で訂正する
-C (commit ID)で指定コミットのメッセージを流用する
小文字cにするとエディタで編集できる

git cherry-pick (commit ID)

コミット(commit number)をチェックアウト中のブランチにマージ

git cherry-pick -n (commit ID)

コミット(commit number)をチェックアウト中のブランチにマージ
ただしステージするのみ
コミット時は-mでコメントを加えなくてもチェリーピックしてきたコミットのコメントがそのまま追加される

git revert (commit ID)

指定コミットを取り消すコミットを行う

git revert -n (commit ID)

指定コミットを取り消す変更を作成しステージする

git reset (commit ID)

指定コミットの状態までファイルを戻す
取り消す差分は作業ツリーに残る

git reset --soft (commit ID)

指定コミットの状態までファイルを戻す
取り消す差分はステージングエリアに残る

git reset --hard HEAD^

最後のコミットを削除
取り消す差分はステージングエリア及び作業ツリーにも残らないため注意

git blame (file)

指定ファイルに対する変更ごとのコミット者とタイムスタンプを表示

git blame -L (表示開始行番号),(表示終了行番号) (file)

指定行番号間のみgit blame表示
(表示終了行番号)は+4や-5のように書くと相対的な行番号となる

git blame -M (file)

ファイル内の行コピー箇所をオリジナルと同一のコミットとしてgit blame表示

git blame -C -C (file)

他ファイルからの行コピーをオリジナルと同一のコミットとしてgit blame表示

git rebase (branch)

指定ブランチ(branch)の分岐点をチェックアウト中のブランチ先頭に移動させる

git rebase -i (commit ID)

rebaseの対話モードを起動して指定コミット以降のコミットへのrebaseのための編集を行う


参考文献
Travis Swicegood『入門git』

相似比を用いた折り紙の領域分割

折り紙で動物を作ろうとした際,自分の場合はまず頭部のみを試作し,その後胴体を含めた全体の試作を行う.

このとき毎回問題になるのが頭部と胴体の大きさの比率であり,頭と胴のバランスが良くなるようにいくつか異なる比率で試している.

f:id:kawazu_gkgk:20190202211421p:plain

この"比率をつくる"方法として定規で測ってしまうという手があるが,出来れば道具を用いずに"折る"ことだけで実現したい.私の中では折り紙は紙だけあればいつでもどこでも出来る手軽な趣味という立ち位置.

折る(折り目を付ける)だけで比率を作る際に利用するのが"三角形の相似比"である.

下図のような平行線の間に2本の線を加えてつくられる2つの三角形は対頂角・錯角の関係から相似となる.

 f:id:kawazu_gkgk:20190112192507p:plain

相似比は並行線上の底辺の長さの比で決めることが出来,これによって一方の平行線からもう一方の平行線へ延びる直線は三角形の頂点の部分から相似比で分割される.

これを用いることで様々な比率を作れるが,具体的な方法は毎回その場で考えているため複雑な比率を考えると時間がかかってしまっていた.
そのためここに具体的な折り目のつけ方をまとめてしまおうというのが今回の目的である.

  • 1/3

 f:id:kawazu_gkgk:20190202175455p:plain

基本的に折り紙の対角線1本+もう1本の斜め線で相似の三角形を作る.

縦折りで半分にすることで出来る折り目を目印にして図のように折り目を入れれば相似比1 : 2の三角形が出来,1/3が作れる.

  •  1/5

f:id:kawazu_gkgk:20190202232157p:plain f:id:kawazu_gkgk:20190202232248p:plain

縦に4つ折りした折り目を用いることで1/5,2/5を作ることが出来る.

 

  • 作ることが可能な比

この領域を分割する方法で作ることが可能な比を考える.

折り紙を縦にn等分する折り目を作ることが出来るならば,

l/n : m/n  = l : m (m < n, l < n)

となる相似比の三角形を作成することが可能,すなわちl/(l + m)の領域を作ることが可能ということになる.

逆に言えば・・・

・1/3を作る場合,l = 1, m = 2となるため少なくとも2等分する必要がある.

・1/5を作る場合,l = 1, m = 4となるため少なくとも4等分する必要がある.

・2/5を作る場合,l = 2, m = 3となるため少なくとも3等分する必要がある.

・3/7を作る場合,l = 3, m = 4となるため少なくとも4等分する必要がある.

実用のために前述の条件を以下のように言い換える.
 

分数a/bの領域を作る場合,b - a < nとなる整数nで紙を等分する必要がある.
ただしa, bは互いに素な整数であり,a ≦ b/2とする.


a > b/2となる場合(2/3, 4/7等)は(b - a)/bとして考えればよい.

ところで,2つ折りを繰り返していくことで折り紙をx^2等分(xは整数)することは容易であるので,作りたい比率に合わせてこの方法で必要な分割数を作ることが可能と言える.

したがって以上の方法で任意の整数比の領域分割が可能となる.

 

 

やらなければ,始まらない・・・

2018年,やりたいと心の中で思っていたが結局やらなかったことが山積みで終わった年.

 出来たことと出来なかったことの違いは結局
"少しでも行動したか,しなかったか"
ということだけでしかなかったというのが2018年の反省.

これからこの状況を打開するためには
"何でもいいから出来る行動をおこす"
そのためにここを開設した.

具体的には制御工学まわり(&その他)の勉強ついでにわかったことをここに残す.

やった事をひとまとまりにまとめ,どこにでもいいのでアウトプットする場としてここを利用する.