z軸のまわりに回転する線形変換

z軸のまわりに回転する図を描く.


Start3d();

Ptseg3data();
Putaxes3d(5);
Xyzax3data("","x=[0,4]","y=[0,4]","z=[0,3]");
// 点Aを適当なところに打つ.以下,点Aの位置で円の高さと半径を決める.
Defvar("h",A3d.z);
// 右側副画面の Az の高さが点A の3次元空間内での高さであり,これを h とする.
Putpoint3d(["B",[0,0,h]],"fix");
//  z 軸上の高さ h の点を B とする.
Defvar("r",Dist3d("A","B"));
// A,Bの距離(点Aのz軸からの距離)を r とする.
Spacecurve("1","[r*cos(t),r*sin(t),h]","t=[0,2*pi]",["notex"]);
// 高さ h のところの半径 r の円のデータを作る.
// 3次元データが "sc3d1",2次元データが "sc2d1" となる.
PutonCurve3d("C","sc3d1");
PutonCurve3d("D","sc3d1");
// 円上に点 C,D をとる.
Partcrv("1",C,D,"sc2d1",["do"]);
// 弧CD を点線で描く.
Spacecurve("2","[r*cos(t),r*sin(t),0]","t=[0,2*pi]",["notex"]);
// xy平面上の半径 r の円のデータを作る.2次元データが "sc2d2" となる.
Putpoint3d(["E",[C3d.x,C3d.y,0] ],"fix");
Putpoint3d(["F",[D3d.x,D3d.y,0] ],"fix");
// C,D を xy 平面へ射影した点を E,F とする.
// 「線分を加える」ボタンを押し,BC,BD,OE,OF,CE,CF を結ぶ.
Setcolor([0,0,1]);
Changestyle(["sl2dBC","sl2dBD"],["dr"]);
Partcrv("2",E,F,"sc2d2",["do"]);
Setcolor([0,0,0]);
// 線分BC,BD を青色実線で,弧EF を青色点線で描く.
// 「点を加える」ボタンを押し,線分BC上に点Gをとる.ここに回転角を示す弧を描く.
Defvar("r2",Dist3d("G","B"));
// G,Bの距離(点Gのz軸からの距離)を r2 とする.
Spacecurve("3","[r2*cos(t),r2*sin(t),h]","t=[0,2*pi]",["nodisp"]);
// 回転角を示す弧を描くための円データを作る.2次元データが "sc2d3" となる.
Putpoint("H",Intersectcrvs("sc2d3","sl2dBD")_1);
// この円と線分BDとの交点を H とする.
Partcrv("3",G,H,"sc2d3");
// 弧GH を描く.これが回転角を示す弧になる.
Arrowhead(D,"part1");
Arrowhead(H,"part3");
// 矢じりを描く.
Pointdata("CD",[C,D],["Size=5"]);
// C,D のところに大きめの点を描く.画面上で緑色になる.
Pointdata("NT",[A,Az,G],["nortex"]);
// 動かせる点を画面上で緑色にする.TeXに出力はしないので,"notex"にしておく.
Letter([O,"nw","O",C,"s1e1","P",D,"e2","P$`$"]);
Expr([(G+H)/2,"s","\theta"]);
// 点の名前などを書く.
all3d=Datalist3d();
// 画面に描かれているすべての3次元プロットデータを all3d とする.
if(1==0,
// スケルトン処理をするときは 1==1 ,点を動かすときなどは 1==0 とする.
tmp=remove(all3d,["sc3d1"]);
Skeletonparadata("1",["ax3d"],tmp,[""]);
// 座標軸 ax3d にスケルトン処理をする.
// 表示しない sc3d1 でz軸を切ってしまうので除いておく.
Setcolor([0,0,1]);
tmp=remove(geoseg3d,["sl3dBC","sl3dBD"]);
Skeletonparadata("2",tmp,all3d,["do",""]);
// 画面上で描いた線分が geoseg3d となる.
// この内,実線で描いた sl3dBC と sl3dBD を除いたもの
// にスケルトン処理をして,青色点線で描く.
Setcolor([0,0,0]);
// 黒色に戻しておく.
);
// ここまでが if の中に入っている.
最終更新:2016年10月30日 15:46
|新しいページ |検索 |ページ一覧 |RSS |@ウィキご利用ガイド |管理者にお問合せ
|ログイン|
添付ファイル