>少し恐縮ですがあらやさんはもちろんすべて手書きなのですよね?
>タイピングを打つ感覚で書いているのでしょうか?
過大な評価を受けているようですが……
残念ながらスラスラと打ってるわけではありません。
抜粋すると、この辺りはたしかメモ帳か何かで計算式を書いて
必要最低限の箇所だけ残したような。。。
; rotate 任意軸周りの空間回転演算 ( x0, y0, z0, vx, vy, vz, cx, cy, cz, va, x1, y1, z1)
; 入力値 x0 y0 z0, 回転軸ベクトル vx vy vz, 回転の中心座標 cx cy cz, 回転角度 va, 出力変数 x1 y1 z1
;#deffunc shift_rotate double x0, double y0, double z0, double vx, double vy, double vz, double cx, double cy, double cz, double va, var x1, var y1, var z1
*shift_rotate
; 座標の平行移動(回転の中心座標を原点に合わせる)
mpx = x0 - cx;
mpy = y0 - cy;
mpz = z0 - cz;
; 回転軸の単位ベクトル化
;r = powf(vx*vx + vy*vy + vz*vz, 0.5);
r = sqrt(vx*vx + vy*vy + vz*vz);
ax = vx/r : ay = vy/r : az = vz/r;
; 回転演算
sin1 = sin(va);
cos1 = cos(va);
;gosub *calc_sin;
;gosub *calc_cos;
l_cos1 = 1.0 - cos1;
x1 = (ax*ax*l_cos1+cos1)*mpx + (ax*ay*l_cos1-az*sin1)*mpy + (az*ax*l_cos1+ay*sin1)*mpz;
y1 = (ax*ay*l_cos1+az*sin1)*mpx + (ay*ay*l_cos1+cos1)*mpy + (ay*az*l_cos1-ax*sin1)*mpz;
z1 = (az*ax*l_cos1-ay*sin1)*mpx + (ay*az*l_cos1+ax*sin1)*mpy + (az*az*l_cos1+cos1)*mpz;
; 座標の平行移動(ずらした分を戻す)
x1 = x1 + cx;
y1 = y1 + cy;
z1 = z1 + cz;
return;
変数名などはd3moduleを真似たというか、
結果的に必要最低限の式までパクリのような形になってしまいましたが(^^;
場合によっては一旦紙で計算してからソースにする事もありますし
比較的単純な式の場合は上記のようにメモ帳のようなエディタで計算することもあります。
計算以外の箇所を、言葉にすると
『ここからここまで線を引くから…この座標はいくつになって……
えーっと、次が……あ!これやるなら円周率も必要だな!…それから……』
これをイメージしてもらえると実像に近いかと思います。
私がスラスラ打てるようなソースは本当に単純なソースです。
一例としてこのソースは比較的スラスラ書けるレベルでしょうか
(1バイト多く上書きコピーしているというバグになりそうなソースですが)
http://hsp.tv/play/pforum.php?mode=all&num=89561#89564