Point3 クラスは、3D スペースにおけるポイントの特性を定義します。これらの値はベクトルとして知られ、3 つの浮動小数点の値をコンポーネントとして持ちます。3ds Max とやりとりされる座標はすべてこれらの値です。「2 次元および 3 次元ポイント リテラル」も参照してください。
リテラル
[<expr>, <expr>, <expr>]
例:
[x, y, z] [10, 10, 10] [sin x, cos y, tan z] x_axis --equivalent to [1,0,0] y_axis --equivalent to [0,1,0] z_axis --equivalent to [0,0,1]
コンストラクタ
point3 <x> <y> <z>
<color> as point3
プロパティ
<point3>.x: Float -- the x coordinate
<point3>.y: Float -- the y coordinate
<point3>.z: Float -- the z coordinate
演算子
<point3> == <point3>
<point3> != <point3>
<point3> + <point3_or_number>
<point3> - <point3_or_number>
<point3> * <point3_or_number>
<point3> / <point3_or_number>
標準のベクトル演算です。2 番目のオペランドが数値の場合、演算は各コンポーネントの値に対して実行されます。
<point3> * <matrix3>
point3
を matrix3
で指定された座標系に変換します。
<point3> * <quat>
point3
を回転します。
- <point3>
単項マイナス
<point3>[<integer>]
Point3 のコンポーネントを浮動小数点として返します。インデックスで有効な範囲は 1 ~ 3 です。
<point3>[<integer>] = <float>
Point3 のコンポーネントを浮動小数点に設定します。インデックスで有効な範囲は 1 ~ 3 です。
メソッド
copy <point3>
point3 値の新しいコピーを作成します。
例
newPos = copy oldPos
新しい値は入力 point3 値のコピーを保持しており、入力 point3 値からは独立しています。
length <point3>
ベクトルの長さを返します。
dot <point3> <point3>
ベクトルの内積を返します。
内積のジオメトリックな補間は、2 番目のベクトルの単位ベクトルに対する最初のベクトルの投影の長さになります。つまり、2 つのベクトルが垂直である場合、内積は 0.0 になります。
内積が交換可能であることは、dot X Y == dot Y X と表されます。
内積が結合可能であることは、dot (r\X) Y == r\(dot X Y) **と表されます。
内積が配布可能であることは dot X (Y+Z) == (dot X Y) + (dot X Z) と表されます。
2 つの法線ベクトルの内積はベクトル間の角のコサインであるため、内積は 2 つのベクトル間の角度の計算に使用できます。
例
fn GetVectorsAngle v1 v2 = ( theAngle = acos(dot (normalize v1) (normalize v2)) )
GetVectorsAngle [10,0,0] [10,20,0] 63.435
cross <point3> <point3>
ベクトルの乗積を返します。
乗積は、2 つのベクトルで定義された平面に対して常に垂直な 3 番目のベクトルで、方向は右回りのルールによって定義されます。
乗積は、最初のベクトルの長さに 2 番目のベクトルの長さを乗算し、2 本のベクトル間の角度の正弦(sin)を乗算したものとして表されます。このため、平行なベクトルの乗積は 0.0 になります(sin 0.0 == 0.0 であるため)。
さらに乗積は、2 本のベクトルによって形成された平行四辺形の面積にも等しくなります。2 本のベクトルが面のエッジである場合、乗積はその面に対する法線ベクトル(面に垂直なベクトル)となり、面の面積に 2 を掛けた値と長さが等しくなります。
乗積が交換不能であることは、cross X Y == cross -Y X と表されます。
乗積が結合可能であることは、cross (r*X) Y == r*(cross X Y) と表されます。
乗積が配布可能であることは、cross X (Y+Z) == (cross X Y) + (cross X Z) と表されます。
「MAXScript FAQ」の例を参照してください。
normalize <point3>
ベクトルの長さが 1 に等しい、平均化された point3
値を返します。
例
b =[100,30.5,41.3]--take somePoint3 value [100,30.5,41.3] normalB1 =normalize b--getthe normalized vector [0.889603,0.271329,0.367406] length normalB1-- check the length, should be 1.0 1.0-- It is! normalB2 =b / (length b)-- Do-It-Yourself Normalize... [0.889603,0.271329,0.367406]-- same value length normalB2-- of course, the length is also 1.0 1.0
distance <point3> <point3>
ポイント間の距離、つまり(point 2 - point 1)の長さを返します。
例
a = [10,20,30] b = [100,30.5,41.3] distance a b-- returns 91.3123 distance b a-- returns 91.3123 length (b-a)-- returns 91.3123 length (a-b)-- returns 91.3123
random <point3> <point3>
指定されたポイントの間に疑似乱数ポイントを生成します。ポイント A とポイント B がワールドに合わせて配置された境界ボックスのコーナーであるとみなされる場合、乱数ポイントはベクトル B - A 上には置かれず、境界ボックス内に充満されます。
例
a = [-10,-20,-30]-- define point A b = [20,30,50]-- define point B p1 = Point pos:a-- create a Point Helper at point A p2 = Point pos:b-- create a Point Helper at point B -- create 2000 spheres at random positions between point A and B for i = 1 to 2000 do sphere pos:(random a b) radius:2 wirecolor:blue
arbAxis <point3>
「上」方向に point3
を使用する任意の軸システムを表す Matrix 値を返します。
matrixFromNormal <point3>
与えられたポイントによって指定された法線を Z 軸とする Matrix3 値を返します。Matrix3 値の変換部分は[0,0,0]です。スケール部分のコンポーネントは、point3
値の平均化に必要な値の逆数です。
例については、「面のローカル回転を取得する方法はありますか。」を参照してください。
例
MatrixFromNormal [0,0,1] MatrixFromNormal [0,1,1]
次のように返されます。
(matrix3 [1,0,0], [0,1,0], [0,0,1], [0,0,0]) (matrix3 [0,-0.707107,0.707107] [1.41421,0,0] [0,1,1] [0,0,0])
noise3 <point3>
3D スペース上の浮動小数点ノイズ関数で、擬似乱数 3 次のスプラインによって実装されます。返される値の範囲は -1.0 から +1.0 です。point3
値が同じ場合、noise3()
関数は常に同じ値を返します。
noise4 <point3> <phase_float>
noise3 と同じ関数ですが、2 番目のパラメータを使用して位相を変えることができます。返される値の範囲は -1.0 から +1.0 になります。
turbulence <point3> <frequency_float>
noise3 関数の上に構築された、単純なフラクタルループ タービュランスです。2 番目のパラメータはタービュランスの周期をコントロールします。返される値の範囲は 0.0 から +1.0 になります。
fractalNoise <point3> <H_float> <lacunarity_float> <octaves_float>
分数によるブラウン運動を使用して実装された 3D スペースのフラクタル関数です。この関数は等質かつ等方的です。実数を返します。
考慮すべき事項は、以下のとおりです。
point3
- ノイズを計算するスペース内のポイントです。
H_float
- フラクタル増分パラメータは[0,1]の範囲にあります。H_float
が 1 のとき、関数は比較的スムーズになります。H_float
が 0 に近付くにつれ関数はホワイト ノイズに近くなります。
lacunarity_float
- 継続的な振動のずれです。最適な設定は 2.0 です。
octaves_float
- 関数内の振動数です。
すべてのノイズ関数は、「Texturing and Modeling: A Procedural Approach」(Musgrave、Peachey、Perlin、Worley 著、Academic Press 社刊、ISBN :)で紹介されているコードとアルゴリズムを基にしています。
次のスクリプトは、Point3 クラスのさまざまなリテラル、コンストラクタ、プロパティ、演算子、メソッドの使用例を示します。
次のスクリプトは、ノイズ関数のテスト ベッドとして作成されました。このスクリプトはノイズ関数による出力の 2 次元のスライスをビットマップで出力します。行 4 から 10 のノイズ パラメータを変更し、行 12 で評価するノイズ関数を指定すると、さまざまなパラメータやノイズ関数による効果の変化をみることができます。
スクリプト:
-- noise functions test bed b_width=320-- specify size of bitmap b_height=320 size=10.-- total distance covered by each row and column z=0.-- z coordinate of 2D slice phase=0.5-- noise4 parameter frequency=10.-- turbulence parameter fract_interval=.5-- fractalNoise parameters lacunarity=2. octaves=5 -- whichfunc=1-- 1 = noise3; 2 = noise4; 3 = turbulence; 4 = fractalNoise -- b=bitmap b_width b_height-- create the bitmap for h=0 to (b_height-1) do-- step through each row of the bitmap ( h_norm=(h as float/(b_height-1))*size-- calculate y coordinate row = for w=0 to (b_width-1) collect-- collect row of pixel colors ( w_norm=(w as float/(b_width-1))*size-- calculate x coordinate noise_val = case whichfunc of-- store result of selected function ( 1: noise3 [w_norm, h_norm , z] 2: noise4 [w_norm, h_norm , z] phase 3: turbulence [w_norm, h_norm , z] frequency 4: fractalNoise [w_norm, h_norm , z] fract_interval lacunarity octaves ) noise_val = 0.5*(1.+noise_val)-- convert output range to 0. to 1. white*noise_val-- and multiply by color white ) setpixels b [0,h] row-- store row of pixels in bitmap ) display b-- display bitmap in VFB
出力
次に、上記の各ノイズ関数スクリプトで生成されたビットマップを示します。
noise3
noise4
turbulence
fractalNoise