インスタンス化されたシェイプの判別方法

例えば、pSphereを1つ作成した上で duplicate specialで instanceを1つ作成する。
都合、pSphereが2つ。

この時、’pSphereShape1’はシーン上に2つ存在する。
名称は’pSphere1|pSphereShape1’。シーン上唯一であっても下記コマンド実行で’pSphereShape1’にはならない。

ちなみに、pSphereをもう1つ作成して、そのmeshを’pSphereShape1’にリネームしようとしてもできない。
transformをリネームすると’pSphereShape3’になるし、meshをリネームしても’pSphere3|pSphereShape1’になる。

したがって、シーン上に唯一のはずなのに『パス区切りが取れない、ノード名だけでは見付けられない』というノードがいる場合、インスタンスである可能性大。

但し、前述の’pSphere3|pSphereShape1’のようなものもインスタンスとみなしてしまうので、厳密なチェックが必要なら、こちらのサイトが参考になる。

ちなみに..
シーン上に唯一のはずなのに『パス区切りが取れない、ノード名だけでは見付けられない』というノードで、親が2つ以上存在する場合は、まずインスタンスであると断定できる。

以下のコマンドでも複数の親の存在確認は出来た。

集合を扱う

数学の代数で勉強する、数の集合的なものをPythonで扱う場合の話。
set型を使う事で、数値に限らずデータを集合要素として扱える。

他にもできますが、詳しくはこことか。

デフォルトのlightlink

‘lightLinker1’ノードがデフォルトのライトセットを管理する基本ノード。
実際はDGのコネクション構造で管理されるので、’lightLinker1’で完結はしない。

デフォルト接続は、下図の通り。
lightLinker1.link, lightLinker1.ShadowLinkに、シーンデフォルトのノードから接続があるだけ。

lightLinker_defaults

directionalLightを追加すると、こんな風にdefaultLightSetに加わる。

lightLinker_add_dirlight

ノードを加えつつbreakLightLinksをすると、こんな感じ。
※ignoreアトリビュートにコネクションが発生するのが判る。

lightLinker_ignore

lightLinkerには4つのアトリビュートがあり、『光や影を、反映するかしないか』をコネクションに記憶している。

.link      …光が当たる
.shadowLink  ….影が落ちる
.ignore     ..光が当たらない
.shadowIgnore ….影が落ちない

補足すると、下図のようにdirectionalLightShape1からも対になるリンクが張られていて、対応するライトが判る。

lightLinker_ignore2

細かい話をすると、上記アトリビュートは全てマルチ要素のコンパウンドなので複数の要素を抱えていることを忘れないように..

コンパウンドとマルチ要素については、別の記事参照..
コンパウンドとマルチ
コンパウンドアトリビュートをスカラー要素に展開したい
コンパウンド/マルチ要素のアトリビュートのアクセスに関して

 

【補足】

オブジェクトとライト セットをリンクする(@Maya2014 Help)に書かれているように、lightSetはリレーションの編集で影響範囲を編集できる。
その際は、新しくlightSetを作る必要が出てくる。

下図はlightSetを追加して、ライト毎に別々のオブジェクトを照らすように設定した際のコネクション。

create_lightSet3

lightSetには所属ライトから入力があり、lightLinkerには 影響するオブジェクトから link/ignoreの入力が発生する。

pSphereShape1の場合..
・defaultLightSet(pointLight)との間には ignoreのコネクション
・lightSet(directionalLight)との間には linkのコネクション

各々コネクションは、オブジェクト・ライトの両方から同じアトリビュート(実際はコンパウンドなので、更に子のアトリビュートとしてobject/lightが存在)に繋がる。

 

設定ファイルの形式には、どんなものがあるか

Pythonの場合、自前で保存フォーマットを用意しなくても汎用的な用途として設定状態を入出力できるモジュールがいろいろと用意されている。

pickle:
変数に抱えている情報をそのままファイルに落とせる形式に変換保存、保存したデータの読み込みができる(pickle専用形式)

configPerser:
人間の編集可能なテキスト情報の形で作った設定ファイルの読み込み、同じ形式で保存ができる(Windowsの.iniファイル形式)

miniconf:
変数の抱えている情報を人間の編集可能なテキスト情報に変換保存、保存したデータの読み込みができる(変数名と内容がペアになったテキスト形式)

json:
javascriptのオブジェクト記述文をそのまま保存形式としてファイルに保存、読み込みができる。(javascriptのオブジェクト表記)

yaml:
XMLのような”マークアップ言語ではない”ことを旨とした構造化データ記述形式。テキストなのでファイルに保存、読み込みができる。(表記はyaml形式)

ハッシュ関数

データの探索負荷を軽減するには、最終的には記憶するデータをある程度均等に分散させ可能な限り一意な値にする必要が出てくる。
そういった場合に一般的に使われるのがハッシュ関数。

データをどうやって数値化するか(キー値を得るか)、というのが1つの鍵ではある。

ハッシュ関数とは
C言語アルゴリズム-ハッシュ法

暗号化キーを生成するSecure Hash Algorithmもまた、ハッシュ関数の一種。

Secure Hash Algorithmとは

オームの法則(電圧・電流・抵抗の関係性)


電位差が電気の流れを生み、回路を作ることは電圧の存在でなんとなく判った。

電気は、電圧の高い方から低い方に流れる。
電池の場合だと+極が高い方、-極が低い方。

しかし、実際には電池の+極と-極をつないでも電球が光らない場合はある。
たとえば、単三電池に40Wの電球をつないでも光らない..何故か?

答えは単純で、単三電池の出力が40W電球に対して非力すぎるから。
逆の言い方をすると、40W電球が単三電池に対して『抵抗』が大きすぎるから。

抵抗とは?

回路を道にたとえた場合、抵抗は道幅、水道だったら水道管の太さに相当する。
回路を流れる電気の量を左右するもの。
抵抗が小さいと電気はたくさん流れ、大きいとすこししか流れない。40W電球は抵抗が大きく、光らせるほどたくさんの電気を単三電池一本では賄えないので、40W電球は光らない。

法則:その1(I..電流, V..電圧, R..抵抗)
$$I = \frac{V}{R}$$

『電流』は、電気の流れる量のこと。
電気をたくさん流すには、抵抗の値に対して電圧をある程度上げてやる必要があることが上記の式から判る。

そもそも、40W電球にはどの程度電気が流れているのか?
これは、小中学校の頃に習った電力の計算式で判る。(交流の場合『力率』という要素も加わるが省く)

$$W = V \times A$$

一般家庭の電源は100Vなので、40Wから逆算すると..電流は0.4Aは流れるはず。

$$40W = 100V \times A\\
\frac{40}{100} = \frac{(100 \times A)}{100}\\
A = 0.4$$

法則:その2
$$R = \frac{V}{I}$$

さっきの40W電球は電圧・電流が100V・0.4Aっぽい。法則その2に値を当てはめると..

$$R = \frac{100V}{0.4A}\\
R=250$$

抵抗はΩで表すので、250Ωの抵抗になる模様。
ということは、法則1を使うと..逆説的に式と値が正しいことも判る。(数学的帰納法だっけ?)

$$I = \frac{100V}{250Ω}\\
I = 0.4$$

ちなみに、単三電池は1個当たり 500mAh~1300mAhくらいの電流容量を持っている模様。(mAhというのは、1時間で流せる電流量の単位)
電池を直列に何個までつないで大丈夫なのか(危険がないのか)とかそもそも直列にして計算通りの電圧になるのかは脇に置いておいて、計算すると66個ほど直列につないでようやく100V。電流量も40Wだと 0.4A = 400mAなので、なんとか光りそうな感じ。

調べたら、質問している人がいた..
電池の直列つなぎって、何ボルトくらいまで耐えられるのでしょうか?

家庭用コンセントの場合、常時単3電池66個分くらいの電圧が掛かっていて、しかし電流量の方は電池とは比較にならない量が流れる。
ここは、各家庭のブレーカー次第。一人暮らしの部屋だとブレーカーは10~20Aくらいなので、電池の10~80倍くらいは普通に流れる計算になる。

40W電球の場合は消費電力40Wなので、0.4Aの電流が流れ、抵抗値は250Ω。(100V電源の場合)

家庭用電源が200Vの場合だと、以下のように求まる。
※電球のフィラメントの抵抗値が変化するものではないので、抵抗値は250Ωのはず。あとは電流量や消費電力量を逆算するだけ。
$$I = \frac{200V}{250Ω}\\
I = 0.8$$
$$W = 200V \times 0.8A\\
W = 160$$

抵抗値が変わらない前提だと、電圧が上がるのに比例して電流量も増える。(電圧2倍だと、電流も2倍。)
電力量の方は、都合4倍された形になったが..400Vでもやっぱり4倍だった。(当たり前?)
$$I = \frac{400V}{250Ω}\\
I = 1.6$$
$$W = 400V \times 1.6A\\
W = 640$$

あともう一つ、使い道ぱっと思いつかなかったけど、電圧を求める式も書いておく。
そして、この3つの法則が『オームの法則』と呼ばれる電気の基本的性質をあらわす式。(とても重要。)

法則:その3
$$V = I \times R$$

【補足】
同じお題目に簡潔な回答をしている人がいたので、めも。
電圧と電流の関係について教えてください
電流値があがると電圧値が下がるのはなぜでしょうか

【蛇足..】
本題と全く関係ないが、人間の電気的抵抗値はどの程度なのか調べたら、詳しいサイトがあった..
2000~4000Ωになるようで、家庭用電源だと25~50mAは流れる計算。

ちなみに濡れた手で触れると 50mAに達するので、絶対に振れないように。

交流電流が人体に流れた時の反応
0.5mA    ( 通常、無反応 )
1mA      ( 電撃を感じる )
5mA      ( 相当な苦痛がある )
10~20mA ( 筋肉が収縮し、支配力を失う )
50mA     ( 相当に危険で死に至ることがある )

電圧とは

2つの物体があったとして、その間に生じる電位差を『電圧』と呼ぶ。

電位差を生じるものがない環境では、そこに電圧を推し量る比較対象がないので電圧は存在しない。(電圧0Vになるのではなく、電圧と呼ぶべきものが存在しない状態。)

電池の場合、+極に1.5V、-極に0Vの電圧が生じている。
両極の間には±1.5Vの電位差があり、電圧の高い方から低い方に向かって電気は流れる。

+極と-極を逆に繋いだとしても、電気は流れる。
豆電球を電池と繋ぐと光るが、これは+極と-極を入れ替えても変わらない。どっちみち電位差は生まれるので、電気は流れる。

電気がぐるぐると回り続ける道のことを『回路』と呼ぶ。
+極と-極の間に道を作ることで、回路は作られる。

CodeIQの問題集

めも。
プログラマの取り組む課題って、実際は仕事なので「目的があって、その為の手段に何を選び具体化していくか」までが仕事になると思うんですが、一旦背負っている目的を降ろしてみて手段の部分を焦点に質問にしたら「こんな感じ..」という一例なのかな。

CodeIQの問題に挑戦しよう!

探索木

めも。

図にすると、例えばこんな形に図示できるデータ構造(下記は、二分探索木)を作成。そのデータ構造を使ってデータの検索を平均してより高速に実行するのが目的。

参考サイト(2分探索木(アルゴリズムとデータ構造) – ++C++

2分探索木データ的には、『2,6,10,11,13,21』の6個となる。
仮に、総当たりで調べた場合は上記データがどのように格納されているかにもよるが、最大6回の比較が必要。二分探索木の場合、上記構造の場合は最大3回の比較が必要。(※最後に残った1個が目的の値かどうかまで調べた場合。)

2分探索木2

探索木を用いたアルゴリズムには、木構造をより最適な形にする為の派生アルゴリズムが多数存在する。
木構造 (データ構造)

そもそもプログラムは、アルゴリズムとデータ構造の2本柱で動いている。
探索アルゴリズムも、データ構造としての探索木を用いない探索アルゴリズムもありその方法論は多種多様。これが絶対という答えは存在しない。

なので、最適な方法を選択できるようにするには、まずいろいろなデータ探索方法について知る必要がある。

Tさんのブログに難しい書き込みを発見..

凸包を求める

概念の解説が判り易かったので、めも。

凸包を求める

 
『凸包』がなにかというと、漢字の凸の字が表わす通りの形のように『でっぱった部分を持つ形状』で囲まれた点の集合。
『凸包を求める』というのは、点の集合から『凸包』を割り出す計算のこと。

実際に凸の字の形に点の集合があったら、左右のくぼみが除かれた台形の形に集約されるので、凸という形は微妙に感じるんですが..w