「がんばれない」けど「がんばりたい」

ITエンジニアの仕事のこと。AI、機械学習、ディープラーニング。地頭力。車のこと。

Nock Line|Nature of Code

フラクタル その1 Nock Lineのメモです。

・startとendの位置で決まっている線を下の用に分割する。 ・これを再帰的に行う。

KnocLine.001

■ A ・start位置と変化なし

■ E ・end位置と変化なし

■ B ・基線ベクトル(startからendで決まる線)の1/3の長さ。 ・起点がstart位置

1)起点がstart位置になるので方向ベクトルはstartからend向きになる。 そのベクトルを求めます。 ofVec3f v = end - start;

2)1)の方向ベクトルの長さの1/3のベクトルを求めます。 ここでは1)で求めたベクトルを直接3で割っていますが、 別の変数を用意してももちろんOKです。直接割っているのは、 どうせ基線ベクトルに沿っている必要があるので。 v /= 3;

3)2)のvの起点をstart位置にするために、以下の計算を行います。 v += start; これがBの位置になります。 例えば1)の時点でstartとendのY座標が同じだった場合、vのy値は0になるため、 Bのy値も0のままですしx値に関しても同じくstartポイントのx値とは異なるので、 起点をstartからの位置にする為には必要になります。 ベクトル計算と概念の基礎です。

■ D ・基線ベクトルの1/3の長さ。 起点はstart地点から基線の2/3離れ基線ベクトルに沿った位置。 Bの計算方法と考え方は同じ。 Bの2)を v /= 2*3;にする。

■ C ・Bの位置を起点にし60°反時計周りに回転したベクトル。 ・ベクトルの長さは基線の1/3

1)B,Dと同じく方向ベクトルを求める ofVec3f v = end - start;

2)長さが1/3なので1)で求めたベクトルを3で割る v /= 3;

3)起点をBからのものにする。 ofVec3f s = start; s += v; ※ここまではBと同じだが2)までで求めたvに直接加算しない。 ※sはBの位置が起点になっていて基線ベクトル1/3の長さのベクトル ※sは60°回転後に起点調整をするための変数としてキャッシュしておく必要がある。

4)2)までで求めたベクトルを60°z軸で回転させる。 v.rotate(-60, ofVec3f(0,0,1));

5)4)で求めたベクトルは起点がBになっていないので、3)で求めたsを起点にしたものにする。 return s + v;