しろねこらぼ

しろねこの気まぐれ技術日記

プラトンの多面体定理をオイラーの多面体定理を使わずに証明する

n角形の内角の和は
\begin{align}
\pi (n-2)
\end{align}
より、一つの角は
\begin{align}
\frac{\pi (n-2)}{n}
\end{align}
となる。
ここで、正多角形をいくつか張り合わせ立体を作ることを考える。いくつか張り合わせ立体にするためには平面にならないよう2 \pi より小さくしなければならないので
\begin{align}
\frac{ \pi (n-2)}{n} x < 2 \pi
\end{align}
これを整理すれば
\begin{align}
(n-2)(x-2) < 4
\end{align}
よりこれを満たすものは
\begin{align}
(n,x)=(3,3),(3,4),(3,5),(4,3),(5,3)
\end{align}
これらはそれぞれ、正四面体、正八面体、正二十面体、正六面体、正十二面体に対応している。

pythonで記述した関数を別ファイルに記述し直してimportする

いつも忘れるのでまとめておく。
pythonのバージョンはpython3.7を利用している。

始めに次のようなコードを考える。

print('Hello! python')

これを関数化して別ファイルに移せば

import greeting
greeting.helloworld()

def helloworld():
    print('Hello! python')

これで同様な結果を得ることができる。
ここで、greeting.pyを

def helloworld():
    print('Hello! python')
def hey():
    print('hey')
def hello():
    print('hello')

のように変更する。main.pyでの呼び出しをfrom-importに変更すれば

from greeting import hey
hey()

のように関数呼び出しをすることができるようになる。

異なるブロック線図で表されるシステム同士を等価変換する条件を求める

下図で示すようなシステムの伝達関数を考える。
f:id:sironekoblog:20210224065150j:plain
まず、このシステムの伝達関数W_{1}(s)
\begin{align}
W_{1}(s)=\dfrac{G(s)}{1+G(s)H(s)}
\end{align}
で表すことができる。

ここで次のような別のシステムについて考える。
f:id:sironekoblog:20210224065205j:plain
\begin{align}
W_{2}(s)=\dfrac{G_{1}(s) G_{2}(s)}{1+G_{2}(s)H'(s)+G_{1}(s)G_{2}(s) }
\end{align}
ここでG(s),H(s)
\begin{align}
G(s)&=G_{1}(s) G_{2}(s)\\
H(s)&=1+\dfrac{H'(s)}{G_{1}(s)}
\end{align}
であれば伝達関数
\begin{align}
W_{2}(s)=\dfrac{G(s)}{1+G(s)H(s)}
\end{align}
となり、W_{1}(s),W_{2}(s)は等価となる。

ルービックキューブの自由度

n \times n \times n の立方体で作られるルービックキューブの回転は、重複と逆回転を考えなければ
\begin{align}
24n
\end{align}
となるが、最小の回転軸数は
\begin{align}
3(n-1)
\end{align}

matlabでの伝達関数の定義法

matlabでの伝達関数の定義は単純で、例えば次のような伝達関数G(s)
\begin{align}
G(s)=\dfrac{1}{s^{2}+2s+3}
\end{align}
であれば

Np = [0, 1] 
Dp = [1, 2, 3]
P = tf(Np, Dp)

とすればいい。
matlabのLisenceを所持していない場合、Python_Controlパッケージを用いることでほぼ同様に取り扱うことができる。
Python_Controlがインストールされている環境で

from control.matlab import *
Np = [0, 1]      
Dp = [1, 2, 3]  
P = tf(Np, Dp)
print('P(s)=', P)

とすれば同様の結果を得られる。

浮体に働く復元力

浮体に働く浮力ベクトルとその大きさは
\begin{align}
B = mg \hspace{5mm} W = - \rho g V
\end{align}
で表すことができる。浮体座標系から見れば
\begin{align}
\boldsymbol{f}_{g}^{n} = {}^{t}
\begin{pmatrix}
0 & 0 & B
\end{pmatrix} \hspace{5mm}
\boldsymbol{f}_{b}^{n} = - {}^{t}
\begin{pmatrix}
0 & 0 & W
\end{pmatrix}
\end{align}
重心と浮心の座標を
\begin{align}
\boldsymbol{r}_{g}= {}^{t} \begin{pmatrix}
x_{g} & y_{g} & z_{g}
\end{pmatrix}
\hspace{5mm} \boldsymbol{r}_{b} = {}^{t} \begin{pmatrix}
x_{b} & y_{b} & z_{b}
\end{pmatrix}
\end{align}
とすれば、グローバル座標系への変換は回転行列を用いれば次のようになる。


\begin{align}
\boldsymbol{f}_{g}^{b} = \boldsymbol{R}_{b}^{n} (\boldsymbol{\textit{η}})^{-1} \boldsymbol{f}_{g}^{n} \\
\boldsymbol{f}_{b}^{b} = \boldsymbol{R}_{b}^{n} (\boldsymbol{\textit{η}})^{-1} \boldsymbol{f}_{g}^{n}
\end{align}
これより,浮体に働く復元力ベクトルを\boldsymbol{g} (\boldsymbol{\eta})
\begin{align}
\boldsymbol{g}(\boldsymbol{\textit{η}}) &= -
\begin{pmatrix}
\boldsymbol{f}_{g}^{b} + \boldsymbol{f}_{b}^{b} \\
\boldsymbol{r}_{g}^{b} \boldsymbol{S} (\boldsymbol{f}_{g}^{b}) + \boldsymbol{r}_{g}^{b} \boldsymbol{S} (\boldsymbol{f}_{g}^{b})
\end{pmatrix} \\
&= -
\begin{pmatrix}
\boldsymbol{R}_{b}^{n} (\boldsymbol{\textit{η}})^{-1} \left ( \boldsymbol{f}_{g}^{b} + \boldsymbol{f}_{b}^{b} \right ) \\
\boldsymbol{r}_{g}^{b} \boldsymbol{S} \left( \boldsymbol{R}_{b}^{n} (\boldsymbol{\textit{η}})^{-1} \boldsymbol{f}_{n}^{b} \right ) + \boldsymbol{r}_{b}^{b} \boldsymbol{S} \left( \boldsymbol{R}_{b}^{n} (\boldsymbol{\textit{η}})^{-1} \boldsymbol{f}_{n}^{b} \right )
\end{pmatrix}
\end{align}
したがって次を得る。
\begin{align}
\boldsymbol{g}(\boldsymbol{\textit{η}}) =
\begin{pmatrix}
(m-\rho V) g \ \sin{\theta} \\
-(m-\rho V) g\ \sin{\phi} \cos{\theta} \\
-(m-\rho V) g\ \cos{\phi} \cos{\theta} \\
-(my_{g}-\rho V y_{b} ) g\ \cos{\phi} \cos{\theta} + (mz_{g}-\rho V z_{b} ) g\ \sin{\phi} \cos{\theta} \\
(mz_{g}-\rho V z_{b} ) g\ \sin{\theta} + (mx_{g}-\rho V x_{b} ) g\ \cos \phi \cos{\theta} \\
-(mx_{g}-\rho V x_{b} ) g\ \sin{\phi} \cos{\theta} - (my_{g}-\rho V y_{b} ) g\ \sin{\theta}
\end{pmatrix}
\end{align}
ここで、浮体の浮力が中性浮力であればW=Bが成り立つので
\begin{align}
\begin{split}
\boldsymbol{g}(\boldsymbol{\textit{η}}) = \begin{pmatrix}
0\\
0\\
0\\
-(y_{g} - y_{b} ) mg \ \cos{\phi} \cos{\theta} + (z_{g} - z_{b} ) mg \ \sin{\phi} \cos{\theta} \\
(z_{g} - z_{b} ) mg\ \sin{\theta} + (x_{g} - x_{b} ) mg\ \cos \phi \cos{\theta} \\
-(x_{g} - x_{b} ) mg\ \sin{\phi} \cos{\theta} - (y_{g} - y_{b} ) mg\ \sin{\theta}
\end{pmatrix}
\end{split}
\end{align}

回転行列から回転角を求める

回転行列\boldsymbol{R}について

\begin{align}
\begin{pmatrix}
\cos \psi \cos \theta& \cos \psi \sin \phi \sin \theta - \cos \phi \sin \psi & \sin \phi \sin \psi + \cos \phi \cos \psi \sin \theta \\
\cos \theta \sin \psi& \cos \phi \cos \psi + \sin \phi \sin \psi \sin \theta & \cos \phi \sin \psi \sin \theta - \cos \psi \sin \phi \\
-\sin \theta & \cos \theta \sin \phi & \cos \phi \cos \theta
\end{pmatrix}=
\begin{pmatrix}
R_{11} & R_{12} & R_{13} \\
R_{21} & R_{22} & R_{23} \\
R_{31} & R_{32} & R_{33}
\end{pmatrix}
\end{align}
と定義する。これより回転行列から回転角は
\begin{align}
\phi &= \tan^{-1} \dfrac{R_{32} }{ R_{33}} \\
\theta &= - \sin^{-1} R_{31} =- \tan^{-1} \dfrac{R_{31} }{\sqrt{1- R_{31}^{2} }} \hspace{10mm} (\theta \neq \pm \frac{\pi}{2} )\\
\psi &= \tan^{-1} \dfrac{R_{21} }{ R_{11}}
\end{align}
と求まる。

クォータニオンを定義する

クォータニオンは1つの実部\textit{η}と3つの要素を持つ虚部 \boldsymbol{\varepsilon}からなる。 \boldsymbol{\varepsilon}
\begin{align}
\boldsymbol{\varepsilon}= {}^{t}
\begin{pmatrix}
\varepsilon_{1} & \varepsilon_{2} & \varepsilon_{3}
\end{pmatrix}
\end{align}
である。ここで、\boldsymbol{q}
\begin{align}
\boldsymbol{q} {}^{t} \boldsymbol{q} = 1
\end{align}
を満たしている。これを考慮して単位クォータニオンを定義すれば
\begin{align}
Q=\{ \boldsymbol{q} | \boldsymbol{q} {}^{t} \boldsymbol{q} = 1 , \boldsymbol{q} = {}^{t} ( \textit{η} \ {}^{t} \boldsymbol{\varepsilon} ) , \textit{η} \in \mathbb{R} \land \ \boldsymbol{\varepsilon} \in \mathbb{R}^3 \}
\end{align}
流儀により多少異なる定義になる場合があるが、その場合であってもクォータニオンの持つ性質に影響はない。
ここで\boldsymbol{\varepsilon},\textit{η}はそれぞれ

\begin{align}
\boldsymbol{\varepsilon} = \boldsymbol{\lambda} \sin \frac{\delta}{2} \hspace{10mm} \textit{η}= \cos \frac{\delta}{2}
\end{align}

であるから\boldsymbol{q}

\begin{align}
\boldsymbol{q}= \textit{η}+ \varepsilon_{1} \boldsymbol{i} + \varepsilon_{2} \boldsymbol{j} + \varepsilon_{3} \boldsymbol{k} =\cos \frac{\delta}{2} + \sin \frac{\delta}{2} \boldsymbol{i} + \sin \frac{\delta}{2} \boldsymbol{j} + \sin \frac{\delta}{2} \boldsymbol{k}
\end{align}
となる。

次回以降、クォータニオンと回転行列の関係などを調べていく