plot3d/viewpoint - 3-D プロット内で視点を変化させてアニメーションを作成する
|
使い方
|
|
plot3d(..., viewpoint=vpname);
plot3d(..., viewpoint=[vpname, subopts1]);
plot3d(..., viewpoint=[location=locpts, subopts2]);
plot3d(..., viewpoint=[path=pathpts, subopts2]);
|
|
パラメータ
|
|
vpname
|
-
|
標準の視点パスを示す名前または文字列
|
locpts
|
-
|
位置点の行列またはリスト
|
pathpts
|
-
|
カメラのパスを指定する行列またはリスト
|
subopts1
|
-
|
(オプション) frames オプション
|
subopts2
|
-
|
(オプション) look、upvector、frames または fieldofview のオプションのうち 1 つ以上
|
|
|
|
|
viewpoint オプション
|
|
•
|
viewpoint オプションを使用すると、プロットの上空を移動するカメラのように 3-D プロット内で視点を変化させてアニメーションを作成できます。カメラの位置、方向、向きはすべて表示するフィールドに応じて変更できます。
|
•
|
指定可能な視点には 3 種類あります。名前付きフォームでは、いくつかの標準パスから選択することができます。位置フォームには、結果のアニメーションのフレームごとにカメラの位置を指定する必要があります。パスフォームは、パラメトリックに定義されたパスか、指定された点のセットから計算されたスプラインのいずれかを使用します。
|
•
|
上記に示した使い方では plot3d コマンドを式としていますが、viewpoint オプションは Maple のほとんどの 3-D プロットコマンドで使用できます。
|
|
|
名前付きフォーム
|
|
•
|
最初と 2 番目の呼び出し列で示すように、4 種類の標準の視点パスから一つをリクエストすることができます。使用できる名前は circleleft、circleright、halfcircleleft および halfcircleright で、この名前は文字列としても指定できる場合があります。これらのパスは、プロットの中心を視点としながら、プロットの周囲でカメラを円形または半円形に移動させます。
|
>
|
plot3d(sin(x+y), x=-5..5, y=-5..5, viewpoint="circleleft");
|
•
|
サブオプションを追加しない場合は最初の呼び出し列を使用します。2 番目の呼び出し列は、アニメーションのフレーム数を指定する frames オプションを使う場合に使用します。frames オプションは、名前付き視点フォームで許容されている唯一のサブオプションです。指定しない場合はデフォルトの数が使用されます。
|
>
|
plot3d(sin(x+y), x=-5..5, y=-5..5, viewpoint=["circleleft", frames=20]);
|
•
|
名前付きフォームでは、projection オプションおよび orientation オプションが考慮され、いずれも対話的に変更が可能です。これらのアニメーションのデフォルトの向きは、アニメーションの生成元である最初の 3-D プロットのデフォルトの向きと同じです。プロットからのカメラの距離は projection オプションで指定します。
|
>
|
plot3d(sin(x+y), x=-5..5, y=-5..5, orientation=[0,90], projection=0.7, axes=boxed, viewpoint=["circleright"]);
|
|
|
位置フォーム
|
|
•
|
3 番目の呼び出し列では、下記のサブオプションの項で説明する location オプションを使用する必要があります。行列またはリストによって、フレームごとにカメラの位置を指定する点を指定します。
|
•
|
これに加えて、ビューポートの中心を制御する look オプションが使用できます。また、upvector オプションはカメラの垂直方向の移動を制御する場合に使用します。
|
•
|
location、look、upvector のいずれも単独の点またはベクトルとして指定することができ、この場合、その点またはベクトルがすべてのフレームに適用されます。さらに、look オプションはforward 値 を許容します。これはカメラがパス上にある次の点を見ているという意味になります。
|
•
|
look 値 を指定しないと、カメラの注視点はプロットの中心になります。 upvector 値 を指定しないと、カメラの upvector は [0,1,0] に設定されます。カメラの位置 (視点) からその注視点までの間にベクトルが連結し、このベクトルが任意のフレームの upvector と平行関係にある場合、そのフレームには何も線描されません。
|
•
|
location オプション値によって与えられる点によって、フレーム数が決まりますが、例外が一つあります。location オプションが単独の点で構成される場合、アニメーションを作成するために look または upvector オプションに複数の点が含まれると想定されます。このような場合は、他のオプションにおけるポイントの数によってフレームの数が決まります。frames オプションを指定している場合、値は点の数で暗示されるフレーム数に一致していなければなりません。
|
•
|
fieldofview オプションも位置フォームで使用できます。
|
>
|
plot3d(sin(x+y), x=-10..10, y=-10..10, axes=boxed, projection=.7, viewpoint=[location=[[0, 0, 500],[4750*sin((1/10)*Pi),0,475*cos((1/10)*Pi)], [4500*sin((2/10)*Pi),0,450*cos((2/10)*Pi)],[4250*sin((3/10)*Pi),0, 425*cos((3/10)*Pi)],[4000*sin((4/10)*Pi),0,400*cos((4/10)*Pi)], [3750*sin((5/10)*Pi),0,375*cos((5/10)*Pi)],[3500*sin((6/10)*Pi),0, 350*cos((6/10)*Pi)],[3250*sin((7/10)*Pi),0,325*cos((7/10)*Pi)], [3000*sin((8/10)*Pi),0,300*cos((8/10)*Pi)],[2750*sin((9/10)*Pi),0, 275*cos((10/10)*Pi)],[2500*sin((10/10)*Pi),0,250*cos((10/10)*Pi)]], look = [0,0,0], upvector = [0,1,0], fieldofview = 2]);
|
|
|
パスフォーム
|
|
•
|
4 番目の呼び出し列では、後述のサブオプションのセクションで説明する、path オプションを使用する必要があります。このパスを指定する方法は 2 通りあり、一つは単一のパラメータについての式のリストとして、もう一つはスプライン曲線に一致する点のセットとしての指定方法です。
|
•
|
最初のフォームで、パスは [x(t), y(t), z(t), t=a..b] というリストとして与えられています。ここで x(t)、y(t) および z(t) は名前 t を持つ式です。この式は、a から b までの範囲のパラメータ t の空間値によって同等に評価され、評価された各点はフレームのカメラの位置に対応します。
|
>
|
plot3d(1, x=0..2*Pi, y=0..Pi, coords=spherical, viewpoint=[path=[[50*t, 80*cos(t), 100*sin(t)], t=-3*Pi..Pi]]);
|
•
|
2 番目のフォームで、地点 m を表す m x 3 行列または 3 要素のリストからなるリスト m が与えられます。その後、カメラの位置を生成するためのスプライン曲線が指定の地点まで線描されます。
|
•
|
視点を指定するための場所として、look または upvector オプションを指定することができます。ビューポートとカメラの垂直方向の中心をそれぞれ制御することができます。これらはいずれも、単一の点またはベクトルとして指定することもでき、この場合、値はすべてのフレームに適用されます。また、look オプションは forward の値を取ります。
|
•
|
カメラの位置の計算に使用されるフレームの数は、frames オプションで指定します。このオプションを指定しない場合、フレームの数は look または upvector オプションを指定した場合の値から推定されるか、そうでない場合はデフォルトに設定されます。
|
•
|
fieldofview オプションもパスフォームで指定できます。
|
>
|
M := Matrix([[600,600,600], [400,400,200], [100,100,-400], [1,1,1]], datatype=float[8]):
|
>
|
plot3d(1, x=0..2*Pi, y=0..Pi, coords=spherical, viewpoint=[path=M]);
|
|
|
サブオプション
|
|
アニメーション内のフレーム数を指定する正の整数。デフォルトの値は 50 です。
各フレームに対するカメラの位置を指定する点です。n 点を n x 3 の行列または n の 3 要素のリストからなるサブリストで指定できます。点 i のx、y、および z の各要素は、行列の i 行またはサブリストの i 番目にあります。要素が 3 つのベクトルかリストとして、単独の点も指定できます。単独の点を場所に指定した場合、この点がアニメーションのすべてのフレームで使用されます。
カメラのパスを指定する式または点のリストです。パスはパラメトリック形式の [x(t),y(t),z(t), t=a..b] を取ることができ、この x(t)、y(t)、z(t) は式、名前の t、a、b は数値です。この場合、点の数は a から b に変化するパラメータ t で数値計算されます。あるいは、パスが m x 3 行列か m の 3 要素のサブリストで m > 1 の場合、指定の点 m を通過するスプライン補間式上の点が数値計算されます。いずれの場合も、計算された点の数はアニメーションのフレーム数と同じになります。
各フレームのビューポートの中心 (カメラの注視点) を指定する点です。look 値は location 値と同じ形式を取ります。単独の点が指定された場合、すべてのフレームでこの点が使用されます。look オプションには追加の 値forward を取る場合があり、これはカメラの向きがパス上の次の方向であることを意味します。デフォルトでビューポートの中心となるのはプロットの中心点です。
各フレームにおけるカメラの垂直方向を指定するベクトルです。upvector 値は、行列の各行または各サブリストのコンポーネントが、点ではなくベクトルであることを除き、location 値と同じ形式を取ります。単独のベクトルを指定した場合、これがアニメーションのすべてのフレームで使用されます。デフォルトのベクトルは正の y 軸に相当する [0,1,0] です。
カメラの視野を指定する正の数値で、角度で表します。カメラが距離 z で位置する最大寸法が y のプロットの場合、fieldofview オプションが atan(y/z) に設定されていると、ビューポートのほぼ全域にプロットが表示されます。 この値が大きいとプロットは小さく表示され、遠近効果がより明確になります。遠近感を抑える場合は、この値を小さくし、同時にカメラの位置をプロットから遠ざけるようにします。名前付きの視点にはこの fieldofview オプションは使用できません。
|
|
注意
|
|
•
|
viewpoint オプションは名前付きの形式を使用しない限り、orientation オプションや projection オプションを上書きします。名前付きの形式以外の viewpoint オプションのいずれかが使用された場合は、この 2 種類のオプションは無視され、対話的には変更されません。
|
•
|
frames オプションを指定した場合、location、upvector、または look の各オプション値で指定した点の数に一致しなければなりません。指定されるフレーム数に矛盾があるとエラーが発生します。
|
•
|
指定されるすべての座標はプロットの座標系内に存在します。このため、プロットのスケーリングが一定でない、つまり、scaling=constrained オプションが指定されないといった場合は不整合が生じる可能性があります。たとえば、[500,500,0] にカメラの位置がある場合、スケーリングが制限されていると、このカメラはプロットを 45 度の角度から見ていることになりますが、x と y のスケーリングが異なる場合は、このカメラは別の角度からプロットを見ていることになります。viewpoint オプションはデカルト座標で常に有効です。これは別の座標系でプロットを指定している場合も同様です。
|
|
|