ゆるサブ

趣味のこととか日常で感じたことをゆるく書いていく

Fusion 360 でnumpy (ver.20210723)

以前の記事でFusion 360 でnumpyを動かすことに成功した記事を紹介した。
miogadanisub.hatenadiary.jp

どうやら最近アップデートがあったらしくnumpyを動かそうとしたらエラーを吐いたので、またnumpyのファイルを移動して修正した。


以前はこのフォルダにnumpyを貼り付けていた。

C:\Users\~\AppData\Local\Autodesk\webdeploy\production\~~~~\Python\Lib\site-packages

~~~~のファイルが新しくできているので、別のファイルの中にnumpyを移動する。

C:\Users\~\AppData\Local\Autodesk\webdeploy\production\----\Python\Lib\site-packages

本質的な改善は、上の記事でコメントくれた方の方法のようにして「sys.pathを通す」ということをすればいいと思う。(やり方がよくわからない、、、、)

Fusion 360 のスケッチに三角関数を描いてみた

最近、Fusion 360 にnumpyを導入することに成功したので、試しに簡単な関数を描いてみた。
前回の記事はこちら。
miogadanisub.hatenadiary.jp

準備

まずFusion 360pythonを使うにあたって、それなりの記法というか使い方があるので、AutodeskのホームページからFusion 360 API の適当なサンプルを見つけてくる。
help.autodesk.com
今回は「Program Interface ⇒ Sample Programs ⇒ Modeling ⇒ Sketches ⇒ Sketch spline through points creation and relative function」のソースコードをコピペして、少々手を加えた。
f:id:miogadani:20210715031831p:plainf:id:miogadani:20210715031842p:plainf:id:miogadani:20210715031846p:plain

三角関数

どうやら、曲線をそのまま描くことはできない?ようなので、関数に具体的な値を代入していって出力されたものをスケッチする、という流れになる。
当然、値を細かくしていけば正確な曲線には近づくが、NURBS カーブを使っているので実際はそこまでの点数は必要ない気がしている。


まずは、\(f(x) = \sin (x) \) を 2 cm刻みで描いてみる。
デフォルトの単位がcmになっていることに注意。

import adsk.core, adsk.fusion, traceback
import numpy as np

# ここの部分を変えて、関数を定義する。
posX = np.arange(-10,11,2) # 単位はcm 
posY = np.sin(posX) 

# この下は、基本的に変えなくていい。
def run(context):
    ui = None
    try: 
        app = adsk.core.Application.get()
        ui = app.userInterface

        doc = app.documents.add(adsk.core.DocumentTypes.FusionDesignDocumentType)
        design = app.activeProduct

        # Get the root component of the active design.
        rootComp = design.rootComponent

        # Create a new sketch on the xy plane.
        sketch = rootComp.sketches.add(rootComp.xYConstructionPlane)

        # Create an object collection for the points.
        points = adsk.core.ObjectCollection.create()

        # Define the points the spline with fit trhrough.
        for num in range (len(posX)):
            points.add(adsk.core.Point3D.create(float(posX[num]), float(posY[num]), 0))

        # Create the spline.
        spline = sketch.sketchCurves.sketchFittedSplines.add(points)

        # Get spline fit points
        fitPoints = spline.fitPoints

        # Get the second fit point
        fitPoint = fitPoints.item(1)
 
    except:
        if ui:
            ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))

f:id:miogadani:20210715033942p:plain
2 cm 刻みだと、若干曲線が歪んでいる。もう少し刻みを細かくしてみる。
f:id:miogadani:20210715033945p:plainf:id:miogadani:20210715033950p:plainf:id:miogadani:20210715033956p:plain
今回の場合、5 mm ぐらいの刻み幅で十分なようだ。

三角関数ちょい応用
posX = np.arange(-10,11,0.1) # 単位はcm 
posY = np.sin(posX) + 2 * np.cos(posX * 3)

f:id:miogadani:20210715035208p:plain
フーリエ変換したい。

インボリュート曲線

$$ \begin{eqnarray} x &=& \cos \theta + \theta \cos \theta \\
y &=& \sin \theta -\theta \cos \theta \end{eqnarray} $$

t = np.arange(0,15,0.2) # 単位はcm
posX = np.cos(t) + t * np.sin(t)
posY = np.sin(t) - t * np.cos(t)

f:id:miogadani:20210715043300p:plain
押し出してみる。
f:id:miogadani:20210715043341p:plain

ハートの関数

ハートの関数は色々知られているが、次式を使ってみる。
$$ \begin{eqnarray} x(t)& =& 16 \sin ^3 (t) \\
y(t) &=& 13 \cos(t) - 5 \cos (2t) -2 \cos (3t) -\cos (4t) \end{eqnarray} $$

t = np.arange(-10,11,0.2) # 単位はcm
posX = 16*(np.sin(t))**3
posY = 13*np.cos(t) - 5*np.cos(2*t) - 2*np.cos(3*t) - np.cos(4*t) 

残念ながら、計算に失敗。。。
f:id:miogadani:20210715041412p:plain


ちょっと試しただけだが、色々使えそう。複雑な関数になると、計算に失敗してしまうのが難点。
また、面白そうな関数を見つけたら書いてみようと思う。

Fusion360 でNumpy を使う

Fusion360 のスケッチを書くときに、関数を定義して曲線をかけたら面白そうと思い、やっとのことで環境が整った(多分)ので、覚え書きとしてやったことを書く。

最初にやったこと

とりあえずググってみて、指示に沿って進めた。このブログが参考になった。

  •  環境変数の設定
  • get-pip.py の入手
  • numpy のインストール

kantoku.hatenablog.com

途中までうまく行くが、最後に

No module named 'numpy.core._multiarray_umath'

というエラーをはいてしまい、ここでかなり苦戦した。

原因

結局、エラーの原因は

Python と Numpy のバージョンが適切じゃなかったことだった…

2021年7月12日現在、

だと問題なく動いている(今のところ)。

やったことメモ

私は以前からAtompythonを使っていたので、Numpy自体はインストールされていた。

C:\Users\~\AppData\Local\Programs\Python\Python37\Lib\site-packages

 

 のフォルダに入っているNumpyをコピーする。

f:id:miogadani:20210712231202p:plain

「numpy-1.21.0.dist-info」が必須かどうかは不明。

この2つのファイルを

C:\Users\~\AppData\Local\Autodesk\webdeploy\production\~\Python\Lib\site-packages

の中に貼り付ける。*1(Numpyを貼り付けることで不都合が生じるかもしれないが、よくわからない。)

 

これで完了。

終わってみれば、どうってことないが、かなり時間を食った。

 

 

まだ複雑なコードを書いてないので、問題が発生するかもしれないが、とりあえずはこんな感じで、うまく動いている。

f:id:miogadani:20210712232419p:plain

f:id:miogadani:20210712232524p:plain

 

※参考にするときは自己責任でお願いします。
 

 

 

研究室の中国人留学生に思うこと

研究室の中国人留学生が爆増している。私が研究室に入ったころは1人だった中国人留学生が今では6人になって研究室が中国化している。

研究室メンバーが増えて研究が活発になることは基本的にいい事だと思う。これまでは、私自身が中国や中国人に対して何か直接的な被害を受けたわけでは無かったので、ニュートラルな視点で彼らを判断するようにしていた。しかし最近彼らに対してストレスを感じることが増えてきた。

ただの私の愚痴だが、最近思うことを書いていく。

片付けや備品・実験道具の管理をしない

 彼らは絶対に片付けをしない。

 居室(学生が普段いる部屋)のゴミ箱が満杯になっていても、自主的にゴミ袋を変えようとしない。彼らのデスクは相当に散らかっていて、教科書や論文、飲食物が散乱している。

 もっともストレスなのは、実験室でも片付けをしない事だ。彼らは装置の扱いが雑だし、使用後のゴミを片付けない。しまいには、机に粉末状の試料をこれでもかというほどに残していく。頼むから、他のメンバーの事を考えてくれ。

備品の管理も人任せだ。試薬やキムワイプ、JKワイパーをはじめとした研究室の備品が無くなっても絶対に補填しない、なぜなのか、、、

一番驚いたのは、あまりにも道具の使い方が雑なので、留学生に使われないように個人専用として作って保管していたものを無断で使用されていたことだ。これには恐怖を覚えた。

人のアドバイスは右から左へ

彼らは基本的に他人のアドバイスを受け流す。

良くも悪くも、自我が強い。先生や先輩方に「こうしなさい」言われれば、とりあえず「はい。わかりました。」というものの何も変わらない。何がわかったのだろうか、といつも思う。こちらが善意でアドバイスしたことも、「ok. ok. 」「I see.」とはいうものの、全く響いていない様子だ。

中国人で群れる

 彼らはどこからともなく湧いてきて群れる。

 他の研究室の留学生とも繋がりがあるようで、よく群れて行動している。

そのため、日本人と積極的に関わろうとせず、中国人コミュニティだけで物事を完結させるようだ。なぜわざわざ日本に留学しようと思ったのか。中国に残るか、アメリカにでも行けばいいのに。

爆音での会話

 彼らは基本的に声がでかい。

 人数が増えるほど単調増加的に声量も大きくなっていき、永遠に話を続ける。

居室はオープンな場なので会話してもらっても構わないのだが、集中して作業したいときもあるので、もう少し慎ましくして欲しい。

お礼をしない

彼らは基本的にお礼をしない。

装置の使い方がわからなかったり、実験準備が終わっていないときなどに、彼らの手伝いをすることがある。自分の研究テーマと全く関係ない実験の手伝いを深夜までさせられた挙句、お礼の一つもないと、イライラを通り越して呆れる。

他にも、彼らはやってもらって当たり前という精神があるようで、こちらが好意でやったことに対してお礼を貰ったことはない。極力手伝うのはやめようと思っているが、教授などに手伝うよう指示されると断れないので辛いところだ。

居室でのゲーム

 彼らはゲームが大好きなようだ。

やることをやって人に迷惑をかけていなければ、研究室に来なかろうが、研究室で何をやってようが文句はない。彼らはゲームが好きでよくやっているのだが、たまたま近くを通りかかると、それを隠すような動作をする。ろくに研究をしていない罪の意識があるのかわからないが、サッサと実験終わらせて、家でゲームやればいいのに。

学会発表や講演会を聞かない

彼らは、他人の研究にあまり興味がないようだ。

これに関しては、日本語がほとんど理解できないことが原因だと思うので、仕方ない部分があるのは理解できる。そうはいっても、同じ研究室のメンバーが発表するときくらいは、耳を傾ける努力をしてもいいのでは、と思う。

優秀な学生

ろくに研究をせず周囲にイライラをまき散らす留学生が大半だが、対照的に、とても優秀な人もいる。

 しっかり自分の研究をしているし、日本語・英語・中国語がペラペラかつその他の言語も話せてマルチリンガルだったりする。日本語が流暢だからという理由が大きいと思うが、そういう人は日本人の学生とも積極的にコミュニケーションをとっていて、場を和ませている。

 

 

彼らに対して思うことはもっとあるのだがキリがないのでここら辺にしておく。不満をたらたらと述べてしまったが、彼らも知らない土地にきて不安が大きいだろうと思うので、なるべく優しく接していけたらと思う。

はてなブログで\(\LaTeX\)を使うときの設定ログ

はてなブログでも数式を綺麗に書きたいので、LaTeXを導入した。(LaTeX とは、数式をはじめとした文章のレイアウトを美しく表現可能なソフトウェアで、理系の研究者や学生が論文やレポートを書くときに愛用することが多い。)

以下では、普段LaTeXを使っている人を対象にして、はてなブログを始める際の設定について書いていく。

追加事項があれば、その都度追加していく。

最初の設定

MathJaxのCDNリンクを貼り付ける

たまに数式を使いたい人は、その記事の最初にHLML編集から次のリンクを貼り付ける。

 <script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-MML-AM_CHTML" async="" type="text/javascript"> </script>

ほぼ全ての記事に数式を使う人や、わざわざ毎回設定するのが面倒な人は、ヘッダーにこれを貼り付ければ問題ない。

以下の記事を参考にした。詳細はこちらで。

haskell.hatenablog.com

文中で改行せずにLaTeXを使いたいとき

普通に数式を書きたいときは、$$ で挟んでやれば問題ない。

例えば、

$$ e^{i\theta} = \cos \theta + i\sin\theta $$

といった感じに書ける。

$$ で挟んだ場合、改行されてしまうので、\(f(x) = a + bx\) のように文中に式が書けない。

この問題は、¥( と ¥)で挟んでやれば解決する。

¥bm{} が使えないので、代わりに¥boldsymbol{}を使う

\(\boldsymbol{F} = m \boldsymbol{a}\)のように数式中の文字を太字にしたいときに使っていた¥bmではなく、¥boldsymbol にすれば問題ない。

以下を参考にした。

minus9d.hatenablog.com

不都合な点があればまた追記していく

このサイトが参考になりそう。

memopad.bitter.jp

理系の人が句読点をピリオド・カンマにする理由

はじめに

句読点の代わりにピリオドやカンマが使われた文章を見ると、この文章は理系の人が書いたのかなと思うことがある。

一般の人は、そもそもそんなことを気にも留めないだろうが、一部の人は「句読点をピリオド・カンマにするなんて、意味がわからない。いけ好かない。わざわざ変換してるのかな。」なんて思ったりするようだ。

個人的な考え

あくまでこれは一人の理系大学院生としての意見だが、句読点の代わりにピリオド・カンマを使う理由は次の2つがある。

  1. 数式を文章として扱うため
  2. 統一性を保つため

 まず、一つ目の理由に関してだが、教科書や論文を見てみれば実際にそれが確かめられる。

f:id:miogadani:20210610045627p:plain

https://arxiv.org/pdf/2106.03856.pdf

上の文章はarXivから適当に引っ張ってきたものだが、数式の後にはピリオドとカンマが使われており、文章の一部として扱われるこのようなスタイルが一般的である。 

 しかし、日本語の文章となると話が違ってくる。それは、数式を文章の一部として扱うという共通認識があまりないからである。

 例えば、次のような場合を考えよう。

半径 \(r \) の円の面積 \(S\) は次式で表される。 \begin{gather} S = \pi r^2 \end{gather}
これだけ見てみれば特に違和感はない。

 しかし、英文に従って数式を文章の一部として扱うのならばこうするのが正しいだろう。

半径 \(r \) の円の面積 \(S\) は次式で表される。 \begin{gather} S = \pi r^2。 \end{gather}

ご覧の通り、数式の最後に句点を打つのは気持ち悪すぎる。しかも、これは何らかの数学記号や文字なんかと誤解される恐れがあるので、適切な表現とは到底考えられない。そこで、英文のようにピリオドを使うとどうだろうか。

半径 \(r \) の円の面積 \(S\) は次式で表される。 \begin{gather} S = \pi r^2. \end{gather}

悪くない気がする。ただ、こうなってくると、一つの文章の中に句読点とピリオドが混在することになってしまい、統一感に欠ける。

そこで、日本語の文章にくっついている句読点がピリオド・カンマに変わるという現象が起こる。

半径 \(r \) の円の面積 \(S\) は次式で表される. \begin{gather} S = \pi r^2. \end{gather}

数式が含まれていない文章の場合

 数式が含まれている科学系の文章で句読点がピリオド・カンマに変わる現象については理解してもらえたのではないだろうか。

ただ、「数式が使われていないのに、ピリオド・カンマを使うのは意味がわからない」という意見に関しては、全くその通りだと思う。

そうは言っても、句読点とピリオド・カンマの統一性という点を一度気にしてしまうと、より一般的な文章でも「ん?」と思うことは増えてしまう。例えば、

・空気には、\( \rm{N_2}, \rm{O_2}, \rm{CO_2}, {Ar}\)などが含まれる。
・A君とB君の体重は、それぞれ50, 60 kg だ。

 といったような文章があったときに, 少し違和感を覚える.

このレベルの文章だと, 正直言って句読点かピリオド・カンマかなんて事はどうでもいい話だ. 元々の句読点の役割が, 「文章の可読性を高めること」であることを考えれば, どちらを使ってもその役割は果たしているわけである.

結局、人それぞれの文章に対する美的感覚の問題に帰着してしまうような気がする.

 

理系の文章に限らず, 公文書などではピリオド・カンマを使うことがあるそうだ. その辺りの詳しい背景などを知っている人がいたら是非教えて貰いたいものだ.