// 微分幾何 (朝倉書店) 細野忍著 4000円+税
// 螺旋x(u)の接線と座標軸 5ページ接ベクトル
# t=δ, a=α, b = β, c = γ, e=θ
// 回転軸(α, β, γ)、 α^2+β^2+γ^2=1である必要がある
α=1/√(3);
β=1/√(3);
γ=1/√(3);
//δ = 0.4; // 回転角度(ラジアン)
//δ = 0.5; // 回転角度(ラジアン)
δ = 0.1; // 回転角度(ラジアン)
u0 = 0;
u100;
du = 2π()/25;
x3;
QUATERNION() { // 四元数の演算を宣言する
Q() = QUARTER(COS(δ/2), αSIN(δ/2), βSIN(δ/2), γSIN(δ/2));
};
_XX(u) { // 円柱座標
RETURN(COS(u));
};
_YY(u) {
RETURN(SIN(u));
};
_ZZ(u) {
RETURN(u);
};
∀(x,u) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
P() = QUARTER(0,_XX(u(u)),_YY(u(u)),_ZZ(u(u))); // 円柱の四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
R(x:0,u) = ELEMENT(A(), 0); // 要素を取り出す
R(x:1,u) = ELEMENT(A(), 1);
R(x:2,u) = ELEMENT(A(), 2);
R(x:3,u) = ELEMENT(A(), 3);
};
TITLE(u,"%s=%.1f","VAL");
OUT(R(x,u));
p0 = -2;
p10;
dp = 0.4;
u = 1.5;
h = 0.001;
T?;
T0 = _XX(u); // 接点の位置を求める
T1 = _YY(u);
T2 = _ZZ(u);
T3 = (_XX(u+h)-_XX(u))/h; // x/∂u
T4 = (_YY(u+h)-_YY(u))/h; // y/∂u
T5 = (_ZZ(u+h)-_ZZ(u))/h; // z/∂u
∀(x,p) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
P() = QUARTER(0,T0+T3*p(p),T1+T4*p(p),T2+T5*p(p)); // 四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
S(x:0,p) = ELEMENT(A(), 0); // 要素を取り出す
S(x:1,p) = ELEMENT(A(), 1);
S(x:2,p) = ELEMENT(A(), 2);
S(x:3,p) = ELEMENT(A(), 3);
};
SKIPTITLE();
TITLE(x,"\n%s=%.1f","VAL");
TITLE(p,"%s=%.1f","VAL");
OUT(S(x,p));
q0 = 0;
q1;
dq = 1;
∀(x,q) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
P() = QUARTER(0,q(q),0,0); // 四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
L(x:0,q) = ELEMENT(A(), 0); // 要素を取り出す
L(x:1,q) = ELEMENT(A(), 1);
L(x:2,q) = ELEMENT(A(), 2);
L(x:3,q) = ELEMENT(A(), 3);
};
SKIPTITLE();
TITLE(x,"\n%s=%.1f","VAL");
TITLE(q,"%s=%.1f","VAL"); // x座標軸を描く
OUT(L(x,q));
∀(x,q) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
P() = QUARTER(0,0,q(q),0); // 四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
L(x:0,q) = ELEMENT(A(), 0); // 要素を取り出す
L(x:1,q) = ELEMENT(A(), 1);
L(x:2,q) = ELEMENT(A(), 2);
L(x:3,q) = ELEMENT(A(), 3);
};
SKIPTITLE();
TITLE(x,"\n%s=%.1f","VAL");
TITLE(q,"%s=%.1f","VAL");
OUT(L(x,q)); // y座標軸を描く
∀(x,q) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
P() = QUARTER(0,0,0,q(q)); // 四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
L(x:0,q) = ELEMENT(A(), 0); // 要素を取り出す
L(x:1,q) = ELEMENT(A(), 1);
L(x:2,q) = ELEMENT(A(), 2);
L(x:3,q) = ELEMENT(A(), 3);
};
SKIPTITLE();
TITLE(x,"\n%s=%.1f","VAL");
TITLE(q,"%s=%.1f","VAL");
OUT(L(x,q)); // z座標軸を描く