// 微分幾何 (朝倉書店) 細野忍著 4000円+税
// 球面の立体射影x(u,v) 38ページ図2.2
# t=δ, a=α, b = β, c = γ, e=θ
// 回転軸(α, β, γ)、 α^2+β^2+γ^2=1である必要がある
α=0;
β=0;
γ=1;
δ = 0.2; // 回転角度(ラジアン)
u0 = 5;
u50;
du = -0.2;
v0 = -5;
v50;
dv = 0.2;
x4;
QUATERNION() { // 四元数の演算を宣言する
Q() = QUARTER(COS(δ/2), αSIN(δ/2), βSIN(δ/2), γSIN(δ/2));
};
_X(u,v) {
RETURN(2u/(1+u^2+v^2));
};
_Y(u,v) {
RETURN(2v/(1+u^2+v^2));
};
_Z(u,v) {
RETURN((-1+u^2+v^2)/(1+u^2+v^2));
};
∀(x,u,v) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
// P() = QUARTER(0,_X(u(u),v(v)),_Y(u(u),v(v)),_Z(u(u),v(v))); // 南半球の四元数を生成する
P() = QUARTER(0,_X(u(u),v(v)),_Y(u(u),v(v)),-_Z(u(u),v(v))); // 北半球の四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
R(x:0,u,v) = ELEMENT(A(), 0); // 要素を取り出す
R(x:1,u,v) = ELEMENT(A(), 1);
R(x:2,u,v) = ELEMENT(A(), 2);
R(x:3,u,v) = ELEMENT(A(), 3);
R(x:4,u,v) = _X(u(u),v(v))^2+_Y(u(u),v(v))^2+_Z(u(u),v(v))^2; // 常に1であることを確認する
};
TITLE(u,"\n%s=%.1f","VAL");
TITLE(v,"%s=%.1f","VAL");
OUT(R(x,v,u),R(x,u,v));
TITLE(u,"%s=%.1f","VAL");
TITLE(v,"\n%s=%.1f","VAL");
SKIPTITLE();
OUT(R(x,u,v),R(x,u,v));
#COMMENT
∀(x,u,v) {
// 回転角度(δ)反時計回り
QUATERNION() { // 四元数の演算を宣言する
P() = QUARTER(0,u(u),v(v),0); // 四元数を生成する
A() = ~Q()P()Q(); // δ/2を2回だけ回転させる
};
R(x:0,u,v) = ELEMENT(A(), 0); // 要素を取り出す
R(x:1,u,v) = ELEMENT(A(), 1);
R(x:2,u,v) = ELEMENT(A(), 2);
R(x:3,u,v) = ELEMENT(A(), 3);
};
SKIPTITLE();
TITLE(u,"\n%s=%.1f","VAL");
TITLE(v,"%s=%.1f","VAL");
OUT(R(x,v,u),R(x,u,v));
TITLE(u,"%s=%.1f","VAL");
TITLE(v,"\n%s=%.1f","VAL");
SKIPTITLE();
OUT(R(x,u,v),R(x,u,v));
#END