正四面体の積み上げ。内部にピラミッドの張り合わせ

  • 正四面体を積み上げてスケールの大きな正四面体を作っていくことを考える
  • 内部には、正四面体ではない空洞ができて、その空洞は、底面が正方形であるピラミッドを正方形底面で張り合わせた正八面体が埋め込まれる
  • 以下のコードは、その正八面体を描くもの

ぱらぱらめくる『曲線 折り紙デザイン 曲線で織る7つの技法』

0 曲線を折るということ

  • 伸び縮みしない紙で作る
  • 紙を曲げて作れる形は、可展面と呼ばれる曲面(円錐の仲間、円柱の仲間、接線曲面)。定規を充てることができる曲面
  • 紙を折ることもできる。直線に沿って折る・曲線に沿って折る
  • 展開図は、折り線(山折りと谷折り)を紙に描いたもの。折る角度の情報は失われている
  • 曲面の様子を表すのに、直線エレメント=母線というものが使える
  • 折り線たりえる曲線とそうでない曲線とがある

1 1本の曲線を折る

  • 単純な曲線に沿って折ると紙に曲面が現れる。折りの角度を深くすると、全体に小さい部分空間にまとまってくる
  • 蛇行する曲線で折ると、波面が現れる
  • 複雑な曲線で折ると、ある角度を越えては折れない、という状況が出現する。それが出現するのは、折り曲線から遠いところなので、折り曲線の近傍だけなら、実現可能
  • この「折れない」という状況は、直線エレメント=母線が、交差してしまう点が出現するかどうかと関係する

2 曲線を並べる

  • 2つの曲線を並べて折ると、2つの水平面と曲線状の断崖ができる
  • 折りを深くすると、形が複雑化する
  • 半円を2つ並べて折ると段のある円柱などができる
  • 蛇行曲線を2つ並べて折ると、2つの水平面を曲線の断崖が接続する状態を作れる
  • 曲線で山折りにすると、曲線が凸の側に凸面が、曲線が凹の側に凹面が生じる
  • 折り曲線を並べるときは、山・谷を交互にすることになる

3 曲線を回転させて並べる

  • 平行に並べることもできるし、曲線を並べてぐるりと一周させることもできる

4 折り込む

  • 折り曲線を分岐することもできる。1本の折り曲線が3つに分岐する。山→(山・谷・山)もしくは、谷→(谷・山・谷)と分岐する
  • 折り込みと言う
  • 山脈と谷川はこんな折り具合になっている
  • 折り込みを別の見方で解釈すると:山折り曲線と谷折り曲線との交差になっている

5 円錐を折る

  • 折って平面状になるか(普通の折り紙、平面折り紙)、立体的になるかは、隣り合う折り線が作る角度の等式制約を守るかどうかなどで区別される

6 直線で折り返す

  • 直線の折り線は、通常、曲げられないが、180度折り返すと、曲げられるようになる

7 その他の技法

  • 紙に折り曲線を指定し、折り角度を定めると、どのような形になるかは計算可能
  • 逆に、形からそれを作るための展開図を得るという逆問題は難しい
  • 必要な数学
    • 曲線をパラメタ表示
    • 接線・主法線・従法線
    • 曲率
    • 捩率
    • ガウス曲率
    • 線織面
    • 可展面

python で内包表現

  • pythonに内包表現があり、速いという(たとえばこちら)
  • ちょっと使ってみる
  • 辺の長さが自然数の三角形を列挙する
n = [i for i in range(1,10**2,1)]
triangles = [(a, b,c) for a in n for b in n for c in n if (a + b > c) & (b + c > a) & (a + c > b) ]
triangles
  • ついでに、jupyter notebookで速度測定する方法も書いておく
%%timeit
triangles = [(a, b,c) for a in n for b in n for c in n if (a + b > c) & (b + c > a) & (a + c > b) ]
397 ms ± 2.43 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

SAGEでカバーする数学アプリケーション

  • こちらからSAGEがインストールできる
  • SAGEは、以下の数学アプリをラッピングしている

pari.math.u-bordeaux.fr

    • GAP

www.gap-system.org
("computational discrete algebra")

    • Singular(" a computer algebra system for polynomial computations, with special emphasis on commutative and non-commutative algebra, algebraic geometry, and singularity theory")
    • Maxima("symbolic and numerical expressions, including differentiation, integration, Taylor series, Laplace transforms, ordinary differential equations, systems of linear equations, polynomials, sets, lists, vectors, matrices and tensors")
  • SAGE自体はpython
  • SAGEをダウンロードすると、jupyter notebook形式でSAGE環境を立ち上げることができる

2つの団変数

  • 団代数には、反対称化可能行列Bによって定まる2通りの変化様式がある
  • それぞれの変化様式には、x変数とy変数と呼ばれる有理式が対応する
  • 団変数の変化
    • n変数の団(クラスター)で変化するものとする
    • Bはnxn行列
    • 今、n個のうちk番目に関する変化をさせるものとする
  • x変数の変化は以下の通り
    • i=kのときx'_i = \frac{1}{x_i} ( \prod_{j \ne i} x_j^{(B_{ik})_+} + \prod_{j \ne i} x_j^{(B_{kj})_+})
    • i \ne kのときx'_j = x_i
  • y変数の変化は以下の通り
    • i=kのときy'_i = \frac{1}{y_i}
    • i!=kのときy'_i = y_i (1 + y_k^{sign(B_{ik})})^{B_{ik}}
  • ここで y_i = \prod_{j \ne i} x_i^{B_{ij}}という対応を入れることにする
    • ただし、このBは団変数(B,x),(B,y)が変化するときに、x,yとともに変化するBとする
    • このようなyは、xを変化させて、そこからBの変化したものを使ってyを計算しても
    • yから、yの変化ルールで変化させても、どちらも同じ変化がえられるという
  • この y_i = \prod_{j != i} x_i^{B_{ij}}の定義については、複数の文書にあたったが、Bが変化していることに言及している場合が少なく、紛らわしい
    • 明記してある資料としてはこちらの52ページがある
    • はっきりさせるためには、 y_i = \prod_{j \ne i} x_i^{B_{ij}}のとき、 y_i' = \prod_{j \ne i} x_i'^{B_{ij}'}のように、y,x,Bのすべてに "'"をつけること
expression(1)
expression(((x2 * x3^3 + 1)/x1)^-1/(x1 * ((x2^-1 * x3^-3)^-1 + 
    1)^-1))
expression(((x2 * x3^3 + 1)/x1)^-3/(x1^3 * ((x2^-1 * x3^-3)^-1 + 
    1)^-3))

団変数の行列による変化

  • 団変数は有理式
  • 団変数は団(クラスタ)をなし、そのクラスタに対して行列で定まる変化が起きる
  • nxn行列はn個の変数を変化させるが、n通りの変化を定める
  • 以下は、それのR実装
  • Rのシンボリック演算パッケージRyacasを使っているが、Simplify()関数が有理多項式に対して不完全なので、いまいちだが・・・。実際には、団変化により既出の変数が現れる
  • 同じ行列が定める2つの団変数が相互に双対関係にあることはこちらの記事で