【Unity】振り子を作る

はじめに

倒立振子(紳士って変換すんのやめーや)をUnity上で再現できないか、と考えていて、その前準備としてHinge Jointの使い方を少し調べてみました。

なお以下のサイトを参考にしています。

matatabi-ux.hateblo.jp

(ただ上記記事はHinge Jointコンポーネントをアタッチする先が逆になっているものと思われるので、自分の方では振り子(動体)の方にHinge Jointコンポーネントを当てています。)

 

単独の振り子を作る場合

単独でぶらぶらさせるのは特に複雑なことはなく、(Rigidbodyのアタッチは当然なので割愛)揺れる対象にHinge Jointをアタッチし、揺れの軸Anchorを(ローカル座標なので)物体からどれだけ離すか設定すればいいだけです。Connected Bodyの設定が空だと動体はグローバル座標(空間?)にピン止めされたようになります。

f:id:kcha:20181111155146p:plain(左上の小さな矢印のようなものが揺れの軸です)このように動きます。 

f:id:kcha:20181111160024g:plain

 

何か動くものに振り子を繋ぐ場合

振り子が動くものにジョイントされるにはConnected Bodyに対象の動体をアタッチする必要があります。(今回は球の上にあるキューブです。)なおConnected Bodyの選択肢にオブジェクトがリストされるにはRigidbodyを持っていないといけないようで、上部のキューブにはRigidbodyをアタッチし、物理計算で落下しないようIs KinematicをOnにしてあります。

f:id:kcha:20181111154841p:plain(Connected BodyにPivot(キューブ)をセットし、Anchor位置をPivotと同位置になるようセット。)すると以下のようになります。(動体に留められていることが分かるよう、キューブには左右の移動アニメーションをつけています。)

f:id:kcha:20181111160452g:plain

(ジョイントが1個なのでキューブと球を繋いでいるのが棒に等しい。ジョイントを複数作れば鎖のようにできるのでしょうが。)

 

終わりに

参考サイトのほぼ丸写しではありますが、ヒンジを持ったオブジェクトの作成ができるようになりました。

Unityのリファレンスでの紹介では犬用ドア付きのドアを例に出していますが、ドアのHingeの軸をY軸に、犬用ドアのそれをX軸にすればいいのだけれど、(犬用ドアの)一部分が欠けたプレートをどうやって作るか頭が回らなくなってきたので、ここまで。

(だいぶ実験用プロジェクトの中身がごちゃごちゃになってきた。)

Jupyter Notebookファイルの貼り付けテスト

覚えておくこと

Jupyter Notebook上に表示された出力は、保存データの中に格納されているようなので、例えば外部ファイルの読み込みから表を出力というフローでも、すでに出力される表自体がJupyterのファイル内に入っているので、データファイルをGistに添付する必要は無い。参考はここ。(D&D後、2つのうち一つはいらないのがミソ)

mashiroyuya.hatenablog.com

 

今回の試したもの

kaggleのタイタニックチュートリアルA Comprehensive Guide to Titanic Machine Learning | Kaggle)の冒頭をGistに張り付けてはてなへ。(Gistもはてなも便利)

Test of Gist Presentation of Jupyter Notebook

R言語 入門(文法)

はじめに

R言語の入門として、基礎的な文法を追っていく。

環境

ここからWindowsのバイナリのインストーラをダウンロード。

Download R-3.5.1 for Windows. The R-project for statistical computing.

実行(およびデモの実行方法)

インストールしたRを実行すると、ExcelのようなWindow in Window(このアプリの形式を何ていったっけ?)で、 コンソールがでてくるので

> demo()

と入力すると、予めインストールされているデモンストレーションのリストが 表示される。この各デモを実行するには(例えばgraphicsパッケージのJapaneseを起動したい場合)

> demo(Japanese, package="graphics")

と入力すると以下のようなデモが立ち上がる。 f:id:kcha:20180915172645p:plain

代入

数値、ベクトルの変数への代入は<-を使う。左から右への代入->もできる。
ベクトルの作成にはc()関数を使う。

> x = c(10.4, 5.6, 3.1, 6.4, 21.7)
> x
[1] 10.4  5.6  3.1  6.4 21.7
> c(x, 0, x) -> y
> y
 [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7

(ベクトルの中にベクトルを入れることも可能)

ベクトルの算術計算

ベクトルの四則演算も出来て、ベクトル同士の次元?が等しくなくても動く(警告は出る)。

> y
 [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7
> y * 2 -> yy
> yy
 [1] 20.8 11.2  6.2 12.8 43.4  0.0 20.8 11.2  6.2 12.8 43.4

> y
 [1] 10.4  5.6  3.1  6.4 21.7  0.0 10.4  5.6  3.1  6.4 21.7
> x
[1] 10.4  5.6  3.1  6.4 21.7
> x + y
 [1] 20.8 11.2  6.2 12.8 43.4 10.4 16.0  8.7  9.5 28.1 32.1
 警告メッセージ: 
 x + y で: 
   長いオブジェクトの長さが短いオブジェクトの長さの倍数になっていません 

以降、続く(はず)

dB形式の変換

はじめに

ある本で見かけた数式をコードにおこす練習。(兼ブログ練習)

数式

線形値(dB形式が対数であるのでその対称としてこう呼称する)Nは次式によりdB形式に変換される。
 B[dB] = 10log_{10}(N)
逆にdB値Bから線形値への変換は
 N = 10^{B[dB] / 10}
となる。コード(python)は

import math

def from_decibel(b):
    return 10 ** (b / 10.0)

def to_decibel(N):
    return 10 * math.log10(N)

print("10 dB: " + str(from_decibel(10))) # 10 dB: 10.0
print("20 dB: " + str(from_decibel(20))) # 20 dB: 100.0
print("30 dB: " + str(from_decibel(30))) # 30 dB: 1000.0
print("4000 is " + str(to_decibel(4000)) + "dB")

増幅器の利得係数が100の場合、20dBの利得がある。
 10log_{10}(100) = 10 \times 2 = 20[dB]

AWS入門中

はじめに

AWSのアカウントを作成したので、チュートリアルを行いながら、忘れやすそうな事柄についてメモしておく。(リンクも張っておく)

クラウドでの Linux 仮想マシンの起動方法 – AWS

 

鍵の保管場所

Windows

チュートリアルの推奨通り、 

C:\user\{ユーザー名}\.ssh\MyKeyPair.pem

にキーペアを保存。.sshフォルダを作るには".ssh."とフォルダ名の最後にドットを追加すると先頭ドットが可能になる。

Mac

ダウンロードするキーペアを MyKeyPair.pem というファイル名で  ~/.ssh ディレクトリに保存。ダウンロードしたら chmod 400 でRead権限を自分のみに変更する。

インスタンスへの接続(SSH)

Windows

Git for Windowsをデフォルト設定でインストールする。(Bashを使うため?既にインストールしてあった。)デスクトップ上右クリックメニューにGit Bash起動があるのでそれを使う。

SSHでのインスタンス接続コマンドは、

ssh -i 'c:\Users\ユーザ名\.ssh\MyKeyPair.pem' ec2-user@{Instance's_public_IP_Addr}

pemファイルは上記のキー保管場所、ユーザ名は「ec2-user」でよい(最初、AWSのアカウント名かと思った)。インスタンスへの接続切断はexitで。(切るだけなのでshutdownではない)

Mac

Macの場合、ターミナルからデフォルトのSSHでアクセスする。

ssh -i ~/.ssh/MyKeyPair.pem ec2-user@{Instance's_public_IP_Addr}

他はWindowsの時と同様。

インスタンスの削除

EC2コンソールの Action > インスタンスの状態 > 削除 で。(リストにはterminated状態で残る。)

Python学習(書籍Fluent Pythonより)

はじめに

Pythonの学習としてこの本↓の special methods のオーバーライドを試してみる。
amzn.asia

ソースコード

写経したコードは以下のとおり。__init__に関しては特筆する必要はないでしょう。(自分には必要だけれど)

from math import hypot

class Vector:
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def __repr__(self):
        return 'Vector(%r, %r)' % (self.x, self.y)

    def __abs__(self):
        return hypot(self.x, self.y)

    def __bool__(self):
        return bool(abs(self))

    def __add__(self, other):
        x = self.x + other.x
        y = self.y + other.y
        return Vector(x, y)

    def __mul__(self, scalar):
        return Vector(self.x * scalar, self.y * scalar)

v1 = Vector(2, 4)
v2 = Vector(2, 1)
print(v1 + v2) # Vector(4, 5)
v = Vector(3, 4)
print(abs(v)) # 5.0
print(v * 3)  # Vector(9, 12)
print(abs(v * 3)) # 15.0

各メソッドの機能

__repr__

offcial string representationとある。ソースコードにもあるprintなどで表示される表現を規定する、ってことでいいんでしょうか。(__str__()は文字列型へのデータ変換?なのでこれとは別。)

__abs__

組み込み関数abs(object)で呼ばれた時の動作。

__bool__

truth value testingとあるので、if文の条件に使うのか。

__add__ , __mul__

それぞれ算術演算(+, *)の時の動作。乗算はVectorに対するスカラー乗算。(内積はnumpyに倣ってdot()とか定義したほうがいいでしょうか。)

math.hypot()

なんだこれ、ってことでリファレンス。
9.2. math — Mathematical functions — Python 3.7.0 documentation
Return the Euclidean normとあり、まんまsqrt(x*x + y*y)と書いてあるのでベクトルの長さですね。

リファレンス

上記の特殊関数を調べるのに参考にした。
3. Data model — Python 3.7.0 documentation

追記

このページも結構良さそう。
特殊メソッド名 - Dive Into Python 3 日本語版

メモ:Go langのインストール

インストール記録

Goをインストールしたので、その時の操作の記録。(Go Langのインストールページを見ればいいのだが、いちいち見に行くのが面倒なのと指示通りに設定したか確定できないため)

 

手順

ダウンロードしたmsiファイルを起動。デフォルトのc:\goにインストール。

インストーラがPATH環境変数をc:\Go\binに通してくれる、と書いているが、実際は%GOPATH%\binが設定され、GOPATH環境変数自体はc:\Users\my_account\goなので、新たにPATHにc:\Go\binを追加する。

 

インストール確認

%USERPROFILE%goに移動して(c:\Users\my_account\go)、src/helloディレクトリを作成&移動。サンプルのhello.goファイルを作成して、コマンドラインでhelloディレクトリから >go build & >hello で動作確認完了。

 

スクリプト実行(2018/9/4追記

下記より

qiita.com

> go run filename でコンパイル(exe出力)せずに実行可能。