Essential Mathematics for Computational Design Essential Mathematics for Computational Design, second edition by Robert McNeel & Associates is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License. ii Essential Mathematics for Computational Design 序文 Essential Mathematics for Computational Design は、3D モデリングやコンピュー タグラフィックスのコンピュータ方式(計算方法)(計算方法)の効率的な開発 に必要な基礎的な数学的概念を紹介します。これは、完全な包括的な文書ではあ りません。どちらかと言うと、基本的な最もよく用いられる概念の概要を提供す るものです。 この資料は、高校レベルより上の数学にあまり、またはまったく馴染みがない方 を対象に書かれています。すべての概念は、Rhinoceros®(Rhino)のジェネレー ティブモデリング環境であるGrasshopper®(GH)を用いて、視覚的に説明されて います。RhinoおよびGrasshopperの詳細については、www.rhino3d.com、および www.grasshopper3d.comをご覧ください。 内容は 3 部に分けて書いています。最初の部分では、ベクトル表現、ベクトル演 算、そして直線や平面の式を含む、数学のベクトルを紹介しています。その次に は、行列演算や変換を紹介しています。最後の部分では、NURBS 曲線に重点を置 き、パラメトリック曲線や、連続性、曲率の概念の一般的な説明を行っています。 NURBS サーフェスやポリサーフェスについても触れています。 この文書は、技術的な部分は Robert McNeel and Associates の Greg Arden 博士 に校正して頂きました。彼の協力なしではこの第二版は、実現しませんでした。 また、Robert McNeel and Associates の Margaret Becker 氏も校正を担当してく ださいました。感謝します。この文書で用いられている資料は、2010 年の 2 月に University of Texas at Arlington で行われた Tex-Fab のイベントで行ったワークシ ョップに一部基づいています。 Rajaa Issa Robert McNeel & Associates iii Essential Mathematics for Computational Design 目次 1 ベクトル..................................................................................................................................1 ベクトル表現 ..........................................................................................................................1 ベクトルの演算.......................................................................................................................3 直線のベクトル方程式..........................................................................................................13 平面のベクトル方程式..........................................................................................................15 2 行列と変換 ............................................................................................................................17 はじめに................................................................................................................................17 行列の乗法 ............................................................................................................................17 アフィン変換 ........................................................................................................................18 3 パラメトリック曲線とパラメトリック曲面 .........................................................................23 はじめに................................................................................................................................23 3 次多項式曲線......................................................................................................................23 幾何学的連続性.....................................................................................................................26 曲率.......................................................................................................................................27 パラメトリック曲線評価のアルゴリズム .............................................................................29 NURBS 曲線 .........................................................................................................................33 NURBS 曲線の特徴...............................................................................................................35 NURBS 曲面(サーフェス) ................................................................................................39 NURBS サーフェスの特徴....................................................................................................39 ポリサーフェス.....................................................................................................................42 引用文献 ....................................................................................................................................45 iv Essential Mathematics for Computational Design 1 ベクトル ベクトル表現 ベクトルは、速度や力のような、大きさと向きを持った量を意味します。2 次元座標 のベクトルは、2 つの実数を用いて次のように表現されます。 v = <a1, a2> 同様に、3 次元座標のベクトルは 3 つの実数を用いて次のように表現されます。 v = <a1, a2, a3> ベクトルは、太字の小文字を用いて表します。また、ベクトルの成分は山括弧で囲み ます。点には大文字を使用します。点座標は常に丸括弧で囲みます。 ベクトルは、任意の座標とその中のアンカーポイント(始点)のセットを用いて、線 分表現で表すことができます。通常はベクトルの向きを表すために矢じりも付けます。 例えば、ある特定の 3 次元座標の x 軸に向きが平行で、大きさが 5.18 単位のベクトル がある場合、ベクトルは次のように書くことができます。 v = <5.18, 0, 0> このベクトルを表現するのには、座標でアンカーポイントが必要です。例えば、下の 図の赤い線分はすべて同じベクトルの同等な表現です。 図(1):3 次元座標のベクトル表現。1:Grasshopper の Unit X(x 軸)コンポーネント 2:Grasshopper の Number Slider コンポーネント 3:Rhino の複数の点を参照するように設定された(この場合、v1、v2、v3、 v4 を参照)Grasshopper の Point コンポーネント 4:Grasshopper の Vector Display コンポーネント 3 次元ベクトル v = < a1, a2, a3 >のベクトル成分 a1, a2, a3 はすべて実 数です。また、点 A(x,y,z)から点 B(x+a1, y+a2, z+a3)への線分はすべ て、ベクトル v の同等の表現です。 さて、与えられたベクトルを表現する線分の終点を定義するにはどうすればよいので しょうか? Grasshopper の x,y,z Point コンポーネントを使ってアンカーポイント(P0)を定義し てみましょう。 P0 = (1,2,3) 1 Essential Mathematics for Computational Design 次に、3 つの実数を入力として受け取る Grasshopper の xyz Vector コンポーネントを 使ってベクトルを定義します。 v = <2,2,2> ベクトルの先端(P1)は、アンカーポイントとベクトル v のそれぞれ対応する成分を 加算して計算されます。 P1 = (1+2, 2+2, 3+2) = (3,4,5) 下の定義は Grasshopper のベクトルの Display コンポーネントを使ってこのベクトル を表示し、そのベクトルの終点(点 P1 と同じ位置になることが期待される点)に印 をつけます。 図(2):ベクトル、ベクトルアンカーポイント、ベクトルの先端と同じ位置になる点の間の関係 位置ベクトル 原点 P0 (0,0,0)をベクトルのアンカーポイントとして使う特別のベクトル表現があり ます。位置ベクトル v = <a1,a2,a3>は、次のような P0、P1 の 2 点間の線分で表現さ れます。 P0 = (0,0,0) P1 = (a1,a2,a3) ベクトル v= < a1, a2, a3 >があるとき、位置ベクトルは原点 0(0,0,0)から 点 (a1, a2, a3)への特殊な線分表現です。 ベクトルと、同等の成分を持つ点は異なります。注意してください。下の Grasshopper の定義では、点 P1 の座標がベクトルの成分と同じです。 2 Essential Mathematics for Computational Design 図(3):位置ベクトル ベクトルの演算 ベクトルの和 ベクトルの和は、対応する成分を加算して求めます。つまり、a と b の 2 つのベクト ルがある場合、これらの和、a+b(ベクトル)は次のように計算されます。 a = <a1, a2, a3> b = <b1, b2, b3> a+b = <a1+b1, a2+b2, a3+b3> 例えば、a<1, 2, 0>と b<4, 1, 4>がある場合、これらの和、a+b=<5, 3, 4>は次の図の ように表示されます。 次の Grasshopper の定義は、a と b の 2 つの入力ベクトルの対応する成分を加算して、 a+b ベクトルを作成する方法を示しています。 3 Essential Mathematics for Computational Design 図(4):対応するそれぞれの成分を足してベクトルの和を求める 結果としてできるベクトルは、Grasshopper のビルトインの Addition コンポーネント を使用した結果と同じです。 図(5):GH のベクトル加算コンポーネントを使ってベクトルの和を求める 2 つのベクトルの和を求めるには、それぞれの対応する成分を加算しま す。 ベクトルの和は、複数のベクトルの平均の方向を求めるのにも便利です。この場合、 通常は同じ長さのベクトルを用います。下の例は、同じ長さのベクトルを使った場合 と、異なる長さのベクトルを使った場合の、ベクトルの加算の結果の違いを表示して います。 図(6):ベクトルを加算して平均方向を求める 4 Essential Mathematics for Computational Design 入力ベクトルは、同じ長さとは限りません。平均方向を求めるには、入力ベクトルの 「単位ベクトル」を使う必要があります。後で説明しますが、単位ベクトルとは大き さが 1 のベクトルです。下に示すのは、Grasshopper で異なる長さのベクトルを加算 して平均方向を求める例です。 図(7):単位ベクトルを使用して複数のベクトルの平均方向を求める ベクトルの長さ 与えられたベクトル“a”の長さは、|a|と表記します。ベクトル a = <a1, a2, a3>の大き さ(長さ)は、次のように計算します。 |a| = sqrt(a12 + a22 +a32) 下に示すのは、Grasshopper の Function コンポーネントを使用してベクトルの大きさ を計算する例です。 図(8):ベクトルの長さを計算する 下の図をご覧ください。Grasshopper の Vector コンポーネントに、ベクトルの大きさ を表す出力"L"があります。上の例と同じベクトルを使うと、長さが同じになることが 分かります。 図(9):パラメータとしてのベクトルの長さは GH のベクトルのコンポーネント ベクトルのスカラー計算 ベクトル a = <a1, a2, a3>があるとき、乗数 t = 任意の実数であるとすると、下のよう になります。 a*t = <a1*t, a2*t, a3*t > 下の図は Grasshopper で表した式です。 5 Essential Mathematics for Computational Design 図(10):ベクトルのスカラー計算 単位ベクトル 単位ベクトルは、大きさが 1 単位のベクトルです。単位ベクトルはベクトルの向きを 比較するのによく使用されます。 ベクトルは長さ(大きさ)が 1 単位の場合、単位ベクトルと呼ばれま す。 ベクトルの性質 ベクトルには 8 つの性質があります。a、b、そして c がベクトルで、s と t ががスカ ラーであるとき、これらの性質は次のように書き表すことができます。 1. a + b = b + a 2. a + 0 = a 3. s(a+b) = sa + sb 4. st(a) = s(ta) 5. a+(b + c) = (a+b) + c 6. a + (-a) = 0 7. (s + t)a = sa + ta 8. 1 * a = a ベクトルのドット積 2 つのベクトルのドット積は次のように定義されます。 下の 2 つのベクトルがあるとき、 ベクトル a = <a1, a2, a3> ベクトル b = <b1, b2, b3> ドット積は、 a.b = a1*b1 + a2*b2 + a3*b3 Grasshopper の Vector Dot Product コンポーネントがこの a.b 方程式と同じ結果を生 み出すことを次の図で見てみましょう。 6 Essential Mathematics for Computational Design 図(11):対応するコンポーネントの積の和としての 2 つのベクトルのドット積 Grasshopper には、次の図にあるようにビルトインの Vector Dot Product コンポーネ ントがあります。 図(12):GH の Vector Dot Product コンポーネントを使用して 2 つのベクトルのドット積を求める 2 つの単位ベクトルのドット積を計算する場合、結果は常に 1 と +1 の間になります。 同じベクトル同士のドット積は、そのベクトルの長さの二乗になります。 a.a = |a|2 証明: ベクトル a = <a1, a2, a3>のとき、2 つのベクトルのドット積の定義より次のことが言 えます。 a.a = a1*a1 + a2*a2 +a3*a3 これは以下と同じです。 a.a = a12 + a22 +a32 下のことが分かっているので、 |a| = sqrt(a12 + a22 +a32) 下の式が成り立ちます。 a.a = |a|2 下の図は、ベクトルの長さをそれ自体と掛け合わせた場合と、Dot Product コンポー ネントを用いた結果を比較してこの性質を証明する Grasshopper の例です。 7 Essential Mathematics for Computational Design 図(13):ベクトルとそれ自体のドット積 ドット積とベクトル間の角度 次に挙げるのは、重要なベクトルのドット積の定理です。 a.b = |a||b|cos(ө)、すなわち cos(ө) = a.b / (|a||b|) (ө は位置ベクトル間に包括される角度。) ベクトル a と b が単位ベクトルである場合、この式は次のようになります。 cos(ө) = a.b 2 つの単位ベクトルのドット積は、それらの角度の余弦と等しくなりま す。 証明: 三角形 ABC における余弦定理より、次 の式が成り立ちます。 |AB|2 = |CA|2 + |CB|2 - 2|CA||CB|cos(ө) すなわち、下のことが言えます。 |a-b|2 = |a|2 + |b|2 - 2|a||b|cos(ө) --- (1) |AB|2 は|a-b|2 と等しいので、次のことが 言えます。 |a-b|2 = {a-b) . (a-b) = a.a - a.b -b.a + b.b = |a|2 - 2a.b +|b|2 --- (2) (1)と(2)より、次の式が成り立ちます。 |a|2 - 2a.b +|b|2 = |a|2 + |b|2 2|a||b|cos(ө) すなわち、次のことが言えます。 2a.b = 2|a||b|cos(ө) 上の式は次のようになります。 cos(ө) = a.b / (|a||b|) 8 Essential Mathematics for Computational Design a.b = 0 のときかつそのときに限りベクトル a と b は直交です。 平行である 2 つの単位ベクトルのドット積は何でしょうか? 最も現実的な方法では、2 つのベクトルのドット積は 1 つのベクトルをもう 1 つのベ クトルに射影したときの長さだと考えることができます。 次に挙げるのは、Grasshopper を使ったこの概念の証明です。最初の図では、x 軸単 位ベクトルと入力ベクトル“v”のドット積を計算しています。2 つ目の図では、位置ベ クトル“v”の端点を x 軸に沿った線の上に射影し、原点からその射影点までの距離を計 算しています。ドット積と射影長さは同じになります。 図(14):ドット積とベクトル間の角度 ドット積の性質 a、b および c がベクトルで s がスカラーのとき、次の性質が成り立ちます。 1. a . a = | a |2 2. a . (b + c) = a . b + a . c 3. 0 . a = 0 4. a . b = b . a 5. (sa) . b = s(a . b) = a . (sb) ベクトルのクロス積 2 つの 3D ベクトルのクロス積は、両方の入力ベクトルに直交する 3 つ目の 3D ベクト ルを生み出します。下の 2 つのベクトルがあるとき、 a = <a1, a2, a3> b = <b1, b2, b3> 9 Essential Mathematics for Computational Design クロス積 a X b は行列を用いて定義されます。行列を計算する方法のイラストレーシ ョンを下に挙げます。標準基底ベクトル i=<1,0,0>、j=<0,1,0>、k=<0,0,1>を用いてい ます。 a x b = i(a2*b3) + j(a3*b1) + k(a1*b2) - k(a2*b1) - i(a3*b2) - j(a1*b3) a x b = <a2*b3 – a3*b2, a3*b1 - a1*b3, a1*b2 - a2*b1 > 下に挙げる Grasshopper の定義は、これらの式(Expression)を使ってクロス積を求 め、それを Vector の Cross Product ビルトインコンポーネントを使ったものと比較し ています。これらは両方とも同じ結果になります。 図(15):2 つのベクトルのクロス積を計算 図(16):GH の Cross Product コンポーネントを使用して 2 つのベクトルのクロス積を計算 10 Essential Mathematics for Computational Design ベクトル a x b は、a と b の両方に直交です。 定理 任意の一対の 3D ベクトル a と b があるとき、 |a x b| = |a||b|sin(ө) (ө は位置ベクトル a と b の間に包括される角度。) a および b が単位ベクトルである場合、それらのクロス積の長さはそれらの間の角度 の正弦に等しくなります。すなわち下のことが言えます。 |a x b| = sin(ө) 下の図は、GH のビルトイン Cross Product コンポーネントを用いて 2 つのベクトル のクロス積の長さを計算、そして上で述べた式(Equation)を用いた計算と比較する 例です。予想どおり、これらは両方とも同じ結果になります。 図(17):関数(Function)および GH の Vector Cross Product ビルトインコンポーネントを用いてクロス積 ベクトルの長さを計算 11 Essential Mathematics for Computational Design クロス積を求める際は、演算順序に気をつける必要があります。下に例を挙げます。 a = <1, 0, 0> b = <0, 1, 0> a x b = <0, 0, 1> b x a = <0, 0, -1> Rhino の右手座標系では、a X b の方向は右手の法則(a = 人差し指、b = 中指、結果 = 親指)によって与えられます。 a x b = 0 のときかつそのときに限りベクトル a と b は平行です。 クロス積の性質 a、b および c がベクトルで s がスカラーのとき、次の性質が成り立ちます。 1. a X b = -b X a 2. (sa) X b = s(a X b) = a X (sb) 3. a X (b + c) = a X b + a X c 4. (a + b) X c = a X c + b X c 5. a . (b X c) = (a X b) . c 6. a X (b X c) = (a . c)b – (a . b)c 例 今までに説明した概念を用いて、下の幾何学的問題を解いてみましょう。 1 つの点と 1 つのサーフェスがあります。この点がそのサーフェスの表にあるか裏に あるかを答えなさい。 この問題を解く手順は、次のとおりです。 下に挙げるのは、同じ手順に沿った Grasshopper による解答です。この場合、ドット 積(Dot Product)は 0 より大きいので、点はサーフェスの表側に位置します。仮にド ット積が 0 より小さい場合は、点は裏側になります。 12 Essential Mathematics for Computational Design 図(18):点がサーフェスの表側にあるか裏側にあるかを求める 直線のベクトル方程式 ベクトルの直線方程式は、3D モデリングアプリケーションやコンピュータグラフィ ックスで用いられます。方程式の説明と、それがどのように使われるかを下に示しま す。 図の中で、 L = 直線 v = 直線の方向ベクトル P0 = 直線の位置の点 r = r0 + a --- (1) a = t * v --- (2) よって 1 および 2 から、下が成り立ちます。 r = r0 + t*v --- (3) また一方、(3)は次のように書けます。 <x,y,z> = <x0,y0,z0> + <ta, tb, tc> <x,y,z> = <x0+ta, y0+tb, z0+tc> したがって、 x = x0 + ta y = y0 + tb z = z0 + tc これは下と同じです。 P = P0 + tv 13 Essential Mathematics for Computational Design 下に示すのは、直線上の任意の点を取得する Grasshopper の定義です。 図(19):直線上の点を求める 例 下の図で、P0、P1 の中点 P を求めなさい 次のことを念頭に置いてください。 a は点 P0 の位置ベクトル b は点 P1 の位置ベクトル v は P0 から P1 へのベクトル ベクトルの和の性質より、 a + v = b、つまり v=b-a 一方で直線の方程式は P = P0 + t*v で、また t=0.5 で v=b-a(上より)であること から、下のことが言えます。 P = P0 + 0.5(b-a) 上の方程式を使って Grasshopper の定義を作成します。 14 Essential Mathematics for Computational Design 図(20):2 つの入力点間の中点を求める 一般的に、t の値を 0 と 1 の間で変更することで、P0 と P1 の間の点は何でも求める ことができます。 平面のベクトル方程式 図の中で、 P0(x0,y0,z0 ) = 平面上の与えられた点 r0<x0,y0,z0> = P0 への位置ベクトル n<a,b,c> = 平面の法線ベクトル P(x,y,z) = 平面上の任意の点 r<x,y,z> = P への位置ベクトル 2 つの直交ベクトルのドット積が 0 であることか ら、次のことが言えます。 n . (r - r0) =0 または次のことが言えます。 <a,b,c> . <x-x0 , y-y0 , z-z0 > = 0 ドット積を解くと、平面のスカラー方程式が求 められます。 a(x-x0) + b(y-y0) + c(z-z0) = 0 例 原点と平面法線を使い、3 点を通る平面を見つけるにはどのようにすればよいでしょ うか? 平面を見つけるには、原点と 1 つの平面法線が必要です。3 点のいずれかを原点にす ることができますが、法線はどのように求めればよいでしょうか? 2 つのベクトルのクロス積は、それら両方のベクトルに垂直な 3 つ目のベクトルであ ることが分かっています。これを平面の法線とすることが可能です。したがって、 Grasshopper を使って下のようにこの問題を解くことができます。 15 Essential Mathematics for Computational Design 図(21):3 点を通る平面を求める 16 Essential Mathematics for Computational Design 2 行列と変換 はじめに デザイナーの方は、数学の行列を直接コンピュータによるデザインで用いる必要はな いかもしれません。しかし、行列の基本的な知識はコンピュータデザインがどのよう に行われているかの理解に非常に役に立ちます。変換行列は、オブジェクトの移動、 回転、投影、スケールに関与しています。また、行列は例えば 3 次元のワールド座標 から 2 次元の画面座標へなど、座標系間の変換で用いられています。 変換は 1 つの点(または 1 つのベクトル)を取り、その点を別の点(またはベクト ル)に写像する関数として定義できます。行列とは何でしょう?また、変換になぜそ れが必要なのでしょう? 行列は、いくつかの数を長方形状に並べたものです。行列は m x n で表します。m、n については下のとおりです。 m: 行数 n: 列数 2 つの行と 3 つの列がある行列 M がある場合、 行列の型は次のように表記します。 dim(M) = [2,3] 行列は変換を行うのに非常に役に立つ表現だということが分かっています。複数の変 換が行列を用いると非常に速く行えます。また、行列 1 つですべての変換(移動、回 転、スケール)を表現できます。 行列の乗法 行列の乗法は変換をジオメトリに適用するのに用いられます。いくつかの変換行列が まず乗算され、1 つの変換行列が結果として求められます。その変換行列は、ジオメ トリを変換するのに使われます。行列の乗法はよく使われる行列の演算の 1 つなので、 ここで詳しく説明しましょう。 2 つの行列を乗算するには、それらの型が同じである必要があります。言い換えると、 1 つ目の行列の列数が 2 つ目の行列の行数と同じである必要があるということです。 結果としてできる行列は、1 つ目の行列の行数と 2 つ目の行列の列数を持ちます。例 えば、M1 と M2 の 2 つの行列があり、それぞれの型が[2x4]、[4x5]に等しい場合、結 果としてできる乗算行列 M1.M2 は下の図のように型が[2x5]に等しくなります。 次に挙げるのは、2 つの行列の乗算の一般的な手順です。 17 Essential Mathematics for Computational Design 1. 1 つ目の行列の列数が 2 つ目の行列の行数と同じであることを確認する。 これは、dim(M1)=[axb]と dim( M2)=[cxd]の大きさの 2 つの行列であった場合、 b は c と同じでなければならないということです。 2. 左の行列の 1 行目の各成分と、それに対応する右の行列の 1 列目の各成分の積 の和を求めます。それが結果としてできる行列の(1,1)の成分になります。 3. 同じ要領で残りの行、列の計算をします。 例えば、左の行列の 3 行目と右の行列の 2 列目の積の和は、結果としてできる 行列の(3,2)の成分になります。 特殊な行列に恒等行列(単位行列)があります。恒等行列の主な性質に、どのような 行列も恒等行列との積はその行列自身であるというものがあります。下がその例です。 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 2 3 1 1 = 1*2+0*3+0*1+0*1 0*2+1*3+0*1+0*1 0*2+0*3+1*1+0*1 0*2+0*3+0*1+1*1 = 2 3 1 1 アフィン変換 このセクションでは、「アフィン変換」と呼ばれる特殊な、しかし非常に一般的な種 類の変換を説明します。ジオメトリに適用されると、アフィン変換は長さや角度は変 更せずに、平行線の関係を維持する性質を持ちます。移動、回転、スケール、シア変 形は、アフィン変換です。 移動変換 開始位置から特定のベクトルでの点の移動は、次のように計算できます。 P' = P + V 下のことを仮定します。 P(x,y,z)が与えられた点 v<a,b,c>が変換ベクトル だとすると P'(x) = x + a P'(y) = y + b P'(z) = z + c 3D 点を最後の行に 1 がある 4x1 の列行列として表現すると、変換(実際どのような アフィン変換でも)を行列の乗算で表すことができます。 変換行列の一般的な形式は次のとおりです。 1 0 0 a1 0 1 0 a2 0 0 1 a3 0 0 0 1 18 Essential Mathematics for Computational Design 例えば、点 P(2,3,1)をベクトル v(2,2,2)で移動した際の新しい位置は次のとおりです。 P’ = P + v = (2+2, 3+2, 1+2) = (4, 5, 3) 行列を用い、変換行列と入力点の積を求めると、新しい点の位置は次のように求めら れます。 1 0 0 0 0 1 0 0 0 0 1 0 2 2 2 1 2 3 1 1 = 1*2+0*3+0*1+2*1 0*2+1*3+0*1+2*1 0*2+0*3+1*1+2*1 0*2+0*3+0*1+1*1 = 4 5 3 1 回転変換 下の例は、三角法を用いて z 軸と原点を中心に回転を計算し、その次に、回転の一般 的な行列を導いています。 x,y 平面に点 P(x,y)を取り、それを角度(b)で回転します。図から次のことが言えます。 x = d cos(a) ---(1) y = d sin(a) ---(2) x' = d cos(b+a) ---(3) y' = d sin(b+a) --- (4) 3 と 4 を角度の合計の正弦、余弦の三角恒等式 を用いて展開すると、 x' = d cos(a)cos(b) - d sin(a)sin(b) ---(5) y' = d cos(a)sin(b) + d sin(a)cos(b) ---(6) 式 1 と 2 を用いて、 x' = x cos(b) - y sin(b) y' = x sin(b) + y cos(b) 同時座標系を用い、z 軸を中心とした回転行列は次のようになります。 cos(b) -sin(b) 0 0 sin(b) cos(b) 0 0 0 0 1 0 0 0 0 1 x 軸を中心とした角度 b での回転行列 1 0 0 0 0 cos(b) -sin(b) 0 0 sin(b) cos(b) 0 0 0 0 1 y 軸を中心とした角度 b での回転行列 cos(b) 0 sin(b) 0 0 1 0 0 -sin(b) 0 cos(b) 0 0 0 0 1 19 Essential Mathematics for Computational Design Rhinoのジオメトリライブラリ、OpenNURBS™(http://www.openNURBS.org)には、 変換を扱うOnXformと呼ばれるクラスがあります。OnXformは、変換行列を格納し、 行列演算を行います。下はオブジェクトを回転し、一般形式の回転行列と比較するた めにOnXform行列の値を出力する例です。その他の変換も同じ原則で試してみること ができます。 下はジオメトリを回転し、一般的な行列形式と比較するために行列の値を出力する Grasshopper の定義です。 図(22):ジオメトリを回転し、変換行列を出力 スケール変換 次のことと、 P' = ScaleFactor(S) * P 次のことが分かっています。 P'.x = Sx * P.x P'.y = Sy * P.y P'.z = Sz * P.z スケール変換の行列形式は次のとおりです。 Sx 0 0 0 0 Sy 0 0 0 0 Sz 0 0 0 0 1 20 Essential Mathematics for Computational Design シア変形の変換 3D での変形は、3 つ目の軸に対する軸の対に沿って行われます。例えば、z 軸に沿う シア変形はその軸に沿うジオメトリ変更は行いませんが、x と y の値を変更します。 1- x と z にシア変形。y 座標は固定: 2- y と z にシア変形。x 座標は固定: 3- x と y にシア変形。z 座標は固定: 変換行列の異なる値を変更する GH の定義: 図(23):シア変形行列 21 Essential Mathematics for Computational Design 平面投影(射影)変換 直感的に、与えられた 3D点P(x,y,z)のワールドxy平面上の投影点はPxy(x,y,0)に等しく なります。同様にxz平面の点Pの投影点はPxz(x,0,z)です。yz平面に投影した場合は、 Pxz = (0,y,z)です。これらは正射影 1 と呼ばれます。 曲線が入力としてあり、平面投影(射影)変換を行った場合、平面に投影された曲線 が得られます。下の図は行列形式を用いて各平面に投影した曲線の例です。NURBS 曲線(次の章で説明)は制御点を用いて曲線を定義することを覚えておいてください。 曲線を投影するということはその制御点を投影するということです。 1 詳細はこちらをご覧ください:http://en.wikipedia.org/wiki/Projection_(linear_algebra) 22 Essential Mathematics for Computational Design 3 パラメトリック曲線とパラメトリック曲面 はじめに パラメトリック曲線は、少ない情報で直感的に滑らかな曲線を表現する方法です。パ ラメトリック曲線はまた他の表現形式に比べて編集が非常に容易です。ポリラインは 1 次の区分近似を用いるので、ある程度滑らかな曲線を格納するのに多数の点を使い ます。また特に曲線の滑らかさを維持する必要がある場合、曲線の操作に手間と時間 がかかります。曲線の精度が高いほどデータが重くなりまた編集も難しくなります。 パラメトリック曲線とは、ある定義域上の(通常 0 と 1 の間)1 つの独立媒介変数(通常tで表す) 2 の関数で す。右の図の始点から終点までの道のりを考えてみて ください。この場合、定義域は始点と終点の間の時間 です。媒介変数表示を用いると既に通ってきた位置に 加え任意の時間での位置も求めることができます。 円を例にとります。円の方程式は下のとおりです。 x2 + y2 = r2 円のパラメトリック方程式は、媒介変数 t を用いて次のように定義されます。 x = r cos(t) y = r sin(t) これら 2 つの式が同じ曲線を表示することをお見せするために、パラメトリック方程 式から元の方程式を導いてみましょう。 x/r = cos(t) y/r = sin(t) 下の式から cos(t)2 + sin(t)2 = 1 (ピタゴラスの恒等式) 次のようになります。 (x/r)2 + (y/r)2 = 1、すなわち x2 + y2 = r2 3 次多項式曲線 エルミート 3 やベジェ 4 曲線は、4 つのパラメータで定義される 3 次多項式曲線の例で す。エルミート曲線は、2 つの端点とこれらの点での 2 つの接線ベクトルで定義され ます。それに対してベジェ曲線は、4 つの点で定義されます。これらは数学的に異な りますが、同じような特徴や制限を共有します。 2 詳細はこちらをご覧ください:http://en.wikipedia.org/wiki/Parametric_equation 3 詳細はこちらをご覧ください:http://en.wikipedia.org/wiki/Cubic_Hermite_spline 4 詳細はこちらをご覧ください:http://en.wikipedia.org/wiki/B%C3%A9zier_curve 23 Essential Mathematics for Computational Design ほとんどの場合、曲線は複数のセグメントでできています。これは、区分的 3 次曲線 と呼ばれるものを作成することを必要とします。下のイラストレーションは、3 つの セグメントのある曲線を作成するのに 10 個の格納点を用いた区分的ベジェ曲線です。 最終的な曲線は結合されていますが、滑らかに見えないことが分かります。 エルミート曲線はベジェと同じ合計のパラメータを使用しますが(曲線を定義するの に 4 つ)、より少ない記憶領域でより滑らかに見える曲線を作成するために、次の部 分と共有できる接線曲線という別の情報を持ちます。(下のイラストを参照。) より滑らかなより連続的な曲線を維持するために、Non Uniform Rational B-Spline 5 (NURBS)と呼ばれるパワフルな曲線表現があります。セグメントはより多くの制 御点を共有するので、より少ない記憶領域でより滑らかな曲線を実現することができ ます。(下のイラストを参照。) 5 詳細はこちらをご覧ください:http://en.wikipedia.org/wiki/Non-uniform_rational_B-spline 24 Essential Mathematics for Computational Design NURBS 曲線やサーフェスは、ジオメトリを表示するのに Rhino が用いる主な数学的 表現です。NURBS 曲線の特徴や構成要素については、この章の後の方で説明します。 さて、3 次多項式曲線のパラメトリック方程式はどのように表記するでしょうか?実 務にこれらの方程式は必要ないと思いますが、参考のために一般式を書いておきます。 3 次多項式曲線セグメントのパラメトリック方程式(下)は、 Q(t) = x(t) y(t) z(t) 下のように表せます。 x(t) = axt3 + bxt2 + cxt + dx y(t) = ayt3 + byt2 + cyt + dy z(t) = azt3 + bzt2 + czt + dz 上の Q(t)方程式を書き直すと、下のようになります。 Q(t) = C. T この時 T は、 T = t3 t2 t 1 C は係数行列です。 C = ax bx cx dx ay by cy dy az bz cz dz 行列演算を用いると、曲線方程式の元の形を得られるということが簡単に検証できま す。 Q(t) = C. T = ax bx cx dx t3 = axt3 + bxt2 + cxt + dx = x(t) ay by cy dy . t2 ayt3 + byt2 + cyt + dy = y(t) az bz cz dz t3 azt3 + bzt2 + czt + dz = z(t) 1 25 Essential Mathematics for Computational Design 幾何学的連続性 連続性は 3D モデリングで重要な概念です。連続性は、視覚的な滑らかさを実現した り、滑らかな光や空気の流れを得るのに重要です。 下の表は、様々な連続性とそれらの定義を示しています。 G0 (位置連続) 2 つの曲線セグメントが結合されている G1 (接線連続) 結合点での両方の曲線セグメントの接線方向が同じである G2 (曲率連続) 共通の端点で両方の曲線セグメントの接線および曲率が一致する GN より高い次数に一致する 下の例は、曲線 A と、各曲線 B、C、D の間の曲線連続を比較しています。GH スク リプトコンポーネントは、点 P でのそれぞれの曲線の接線ベクトルとそのベクトルの 長さを計算します。これは、 A = 結合点での接線ベクトル L = ベクトルの長さ 図(24):曲線の連続性を検証 26 Essential Mathematics for Computational Design 下のことが分かります。 曲線 A と B は、G0 連続(結合部分での接線ベクトルが異なる) 曲線 A と C は、G1 連続(結合部分での接線ベクトルが同じ) 曲線 A と D は、G2 連続(G1、および結合部分での曲率が一致する) 曲率 曲率は 3D 曲線やサーフェスのモデリングに広く使われている概念です。曲率は、円 弧の単位長さあたりの曲線に対しての接線の傾きの変化.として定義されます。円や球 の場合、曲率は半径の逆数です。 平面上の曲線にある点で、その点を通り、その点で曲線を最もよく近似する線が接線 です。また、曲線に接し、その点を通る形状を最もよく近似する円を求めることもで きます。この円の半径の逆数がその点における曲線の曲率です。 曲線を最もよく近似する円は曲線の右側にある場合も左側にある場合もあります。こ の区別が重要な場合は、慣例として円が左側にある場合はその曲率を正の曲率とみな し、右側にある場合は負の曲率とみなします。これが正負の符号のついた曲率という ことになります。 結合された曲線の曲率値は、下の図のようにそれらの曲線の間の連続性を示します。 サーフェスの場合、法曲率がサーフェスに対する曲率の 1 つの一般化です。サーフェ ス上の点、その点を通る接触平面、そしてその平面上に特定の方向にその点から伸び る線を考えてみましょう。点、方向、そしてその点でのサーフェスの法線で定義する 平面がサーフェスと交差するところで断面曲線が定義されます。分析したい点でのこ の曲線の正または負の曲率が法曲率です。 分析したいサーフェス上の点の接平面のあらゆる方向での法曲率を計算すれば、最大 値と最小値が必ずあります。 主曲率 特定の点における法曲率の最大値と最小値はサーフェスのその点における主曲率です。 この主曲率はサーフェスのガウス曲率と平均曲率の計算に使用されます。 27 Essential Mathematics for Computational Design ガウス曲率 サーフェス上の点におけるガウス曲率はその点での主曲率の積です。正のガウス曲率 がある点での接平面はサーフェスと 1 点でしか接触しませんが、負のガウス曲率があ る点での接平面はサーフェスを分割します。 A:曲率が正 - サーフェスがボール状 B:曲率が負 - サーフェスがサドル状 C:曲率が 0 - サーフェスが少なくとも 1 方向に平ら(平面、円柱、など) 平均曲率 サーフェス上のある点における平均曲率はその点での主曲率の和の半分です。平均曲 率がゼロの点はガウス曲率の値がゼロか負の値です。 あらゆる点で平均曲率がゼロのサーフェスは極小曲面といいます。あらゆる点での平 均曲率の値が一定しているサーフェスは平均曲率一定曲面(CMC - Constant Mean Curvature Surface)と呼ばれることもあります。 平均曲率一定曲面でモデリングできる物理的プロセスの例としてシャボン玉(自由に 飛んでいる場合や何かにくっついている場合)があります。単純な石けん膜と違って、 シャボン玉は体積を持ち、外部より多少高いシャボン玉の内部の圧力と、シャボン玉 自体の表面積を最も小さくしようとする力が釣り合っている状態にあります。 極小曲面は至るところの曲率がゼロの平均曲率一定曲面の中のサブセットです。 極小曲面でモデリングできる物理的プロセスの例として、固定された枠(針金の輪な ど)に張っている石けん膜があります。石けん膜は空気圧で変形されず(どちらの側 に対する圧力も同じなので)、表面積を最も小さくする妨げはありません。これは一 定の空気の量を持っていて内側と外側からの圧力が違うシャボン玉とは対照的です。 サーフェスの曲率が急に変化する部分を見つけるのに便利です。 28 Essential Mathematics for Computational Design パラメトリック曲線評価のアルゴリズム 3 次ベジェ曲線評価のためのド・カステリョ 6 のアルゴリズム 考案者のポール・ド・カステリョの名前が付けられたこのアルゴリズムは、再帰的な 方法を用いてベジェ曲線を評価します。 Grasshopper を使ってド・カステリョのアルゴリズムを用い、パラメータ(媒介変 数)t での曲線上の任意の点を求めるアルゴリズムをお見せしましょう。これには次 の入力を必要とします: 4 点 A、B、C、D 曲線の定義域(0-1)内での曲線上の パラメータ t 出力: パラメータ t での曲線上の点 解を求める手順: 1. 線 AB 上の t での点 M を求める 2. 線 BC 上の t での点 N を求める 3. 線 CD 上の t での点 O を求める 4. 線 MN 上の t での点 P を求める 5. 線 NO 上の t での点 Q を求める 6. 線 PQ 上の t での点 R を求める 図(25):GH でベジェ曲線を作成 これは、ド・カステリョのアルゴリズムを用いてベジェ曲線上のパラメータを評価す る Grasshopper の定義です。0 と 1 の間で t の値を変更して、ベジェ曲線の始点と終 点の間の任意の点を求めることができます。 6 ド・カステリョのアルゴリズムの詳細に関してはこちらをご覧ください: http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm 29 Essential Mathematics for Computational Design 図(26):ド・カステリョのアルゴリズムを用いてベジェ曲線の点を評価 NURBS曲線の評価のためのド・ブール 7 のアルゴリズム ド・ブールのアルゴリズムは、ベジェ曲線のド・カステリョのアルゴリズムの一般化 です。このアルゴリズムは、数値的に安定しており、3DアプリケーションのNURBS 曲線上の点を評価するのに広く用いられています。下の例は、ド・ブールのアルゴリ ズム 8 を用いた次数 3 のNURBS上の点の評価です。 入力: 7 個の制御点 P0 から P6 ノット(節点)ベクトル: u0 = 0.0 u1 = 0.0 u2 = 0.0 u3= 0.25 u4 = 0.5 u5 = 0.75 u6 = 1.0 u7 = 1.0 u8 = 1.0 出力: u=0.4 での曲線上の点 解を求める手順: 7 ド・ブールのアルゴリズムの詳細に関してはこちらをご覧ください: http://en.wikipedia.org/wiki/De_Boor's_algorithm 8 アルゴリズムの概要と例の詳細についてはこちらをご覧ください: http://www.cs.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/de-Boor.html 30 Essential Mathematics for Computational Design 1. 1 回目の繰り返しの係数を 計算: Ac = (u – u1) / ( u1+3 – u1) = 0.8 Bc = (u – u2) / ( u2+3 – u2) = 0.53 Cc = (u – u3) / ( u3+3 – u3) = 0.2 2. 係数データを用いて点を計 算: A = 0.2P1 + 0.8P2 B = 0.47 P2 + 0.53 P3 C = 0.8 P3 + 0.2 P4 3. 2 回目の繰り返しの係数を 計算: Dc = (u – u2) / (u2+3-1 – u2) = 0.8 Ec = (u – u3) / (u3+3-1 – u3) = 0.3 4. 係数データを用いて点を計 算: D = 0.2A+ 0.8B E = 0.7B + 0.3C 5. 最後の係数を計算: Fc = (u – u3)/ (u3+3-2 – u3) = 0.6 6. u=0.4 パラメータでの曲線 上の点を求める F= 0.4D + 0.6E 31 Essential Mathematics for Computational Design これは、ド・ブールのアルゴリズムを用いて NURBS 曲線上の u=0.4 パラメータを評 価する Grasshopper の定義です。 図(27):ド・ブールのアルゴリズムを用いて NURBS 曲線の点を評価 32 Essential Mathematics for Computational Design NURBS曲線 NURBS は、精度の高い数学的な表現で、曲線とサーフェスを直感的に編集する事が 出来ます。 NURBS(http://en.wikipedia.org/wiki/NURBS)に関しては様々な文献があるので、詳 細はそちらを参照してください。NURBSの基礎を理解していると、NURBSモデラー をより効率的に使うことができます。 NURBS 曲線は次数、制御点、ノット、そして評価公式の 4 つで定義されます。 次数 次数は正の整数で表されます。Rhino は、1 から始まり、どのような次数でも使える ようになっています。次数 5 までは一般的ですが、それより上の次数は実世界ではあ まり役に立ちません。下に挙げるのは、曲線とその次数の例です。 直線やポリラインは、次数 1 の NURBS 曲線です。 階数 = 2(階数 = 次数 + 1) 円やだ円は、次数 2 の NURBS 曲 線の例です。 これはまた、有理もしくは非一様 曲線です。 階数 = 3 (自由)フリーフォーム曲線は通 常、3 字の NURBS 曲線として表現 されます。 階数 = 4 制御点 NURBS 曲線の制御点は、次数に 1 を足した数またはそれ以上の複数の点のリストで す。最も一般的な NURBS 曲線の形状変更方法は、制御点を移動することです。 制御点には重み(weight、ウェイト)と呼ばれる数値が付いています。少数の例外を 除けば、重みは正の数値です。曲線の制御点の重みがすべて同じ(通常 1)である場 合、その曲線は非有理(non-rational)と呼ばれます。ここでは、Grasshopper によっ て、ウェイトの値をインタラクティブに変更する方法を紹介します。 33 Essential Mathematics for Computational Design ノット、またはノットベクトル それぞれの NURBS 曲線には、ノットベクトルと呼ばれる数字のリストが関連付けら れています。ノットは理解し、設定するのは若干困難ですが、SDK の関数が用意され ています。ここでは、いくつか必要な知識を挙げておきます。 ノットはパラメータ値である ノットは、パラメータ値の減少しないリストです。リストには、制御点よりも次 数-1 多いノットの数があります。 次数の数を N とすると、通常非周期曲線には、 最初に同一の N 個のノットがあり、最後にまた同一の N 個のノットが現れます。 曲線の定義域は、これらの端のノット値の間です。 ノットの多重度 ノットベクトルで同一ノットがリストに現れる回数を多重度と呼びます。ノットの 多重度は、曲線の次数より大きくなることはありません。 ノットの多重度は、対 応する曲線の点で連続性をコントロールするのに用いられます。 完全多重ノット 完全多重ノットは、曲線の次数に等しい多重度を持ちます。完全多重ノットでは、 対応する制御点があり、曲線はこの点を通ります。 例えば、クランプ曲線は、曲線の端点で完全な多重ノットを持ちます。これによっ て曲線の端点の位置と制御点の位置が一致します。 内側の完全多重ノットは、対 応する点で曲線にキンクを作ります。 単純ノット 多重性が無く一度しかその数値は表れません。 均一ノットベクトル 均一ノットベクトルは 2 つの条件を満たします。 ノットは多重ノットで始まり、単純ノットが続き、多重ノットで終わります。ノッ トの値は均等の間隔で増えていきます。これはクランプ曲線に特有です。周期曲線 は後述するように異なる構造を持ちます。 下に挙げるのは、同一の制御点の座標を持ちながら異なるノットベクトルを持つ例で す。 34 Essential Mathematics for Computational Design 次数 = 3 制御点の数 = 7 ノットベクトル = (0,0,0,1,2,3,5,5,5) 次数 = 3 制御点の数 = 7 ノットベクトル = (0,0,0,1,1,1,4,4,4) 注:中点の完全多重ノットがキンクを作成 し、曲線がその制御点を通過します。 評価公式 評価公式には数値を入力して点を出力する数学式を使っています。この式は次数、制 御点、そしてノットを使用します。 この式を使用して、SDK の関数は曲線のパラメータを取得し、その曲線上に対応する 点を作成します。パラメータは、曲線の定義域内の数値です。定義域の数値は通常増 加していき、2 つの数値から定義されます。それらは、通常曲線の始点である最小定 義域パラメータ(m_t(0))と、曲線の終点での最大のパラメーター値(m_t(1))です。 NURBS曲線の特徴 NURBS 曲線を作成するには、次の情報が必要です。 次元(通常は 3) 次数(時として階数(次数+1)を用います。) 制御点(点の配列) ノットベクトル(数値の配列) 曲線が有理かどうかの指定(有理曲線の概念については、ウェイト(重み)の 説明の際に説明します。) 3D モデラーを使う際は、通常曲線の次数と制御点を指定する必要があります。 NURBS 曲線を構築するのに必要なその他の情報は自動的に生成されます。終点を始 点と同じ位置にした場合は通常、周期的な滑らかな閉じた曲線が作成されます。下の 図は、開いた(クランプ)曲線、非周期の閉じた曲線、および周期の閉じた曲線です。 クランプ曲線と周期曲線については次のセクションで説明します。 次数 1 の開いた曲線 曲線はすべての制御点を通過します。 35 Essential Mathematics for Computational Design 次数 3 の開いた曲線 曲線の端点が端の制御点と同じ位置にあり ます。 次数 3 の閉じた(非周期)曲線 曲線の始点と終点が制御点と重なります。 非周期曲線の制御点を移動すると、キンク が発生し、曲線は滑らかに見えなくなりま す。 次数 3 の閉じた周期曲線 曲線の終点/始点が制御点を通りません。こ の点は「曲線のシーム」と呼ばれます。図 の赤い点がシームです。 周期曲線の制御点は移動しても曲線の滑ら かさに影響せず、キンクも発生しません。 36 Essential Mathematics for Computational Design クランプと周期NURBS曲線 クランプ曲線は、通常、開いた曲線で、端点の位置が端の制御点の位置と一致します 周期曲線は、滑らかな閉じた曲線です。この違いを理解するのには、お互いの制御点 を比較してみるとよいでしょう。 次のコンポーネントは、クランプ NURBS 曲線を作成し、制御点とノットベクトルを 出力するものです。 図(28):クランプ NURBS 曲線の分析 次が、全く同じ制御点の座標と次数を持つ周期曲線の例です。 図(29):周期 NURBS 曲線の分析 クランプ曲線が、4 つの制御点のみ使用するのに対して、周期曲線は 7 つの制御点(4 +次数)に変えます。周期曲線のノットベクトルは単純なノットになりますが、クラ ンプ曲線は、始点と終点で完全な多重ノットを持ちます。 次は、次数を 2 にした例です。次数を変えると、周期曲線の制御点の数とノットの数 が変わるのが分かります。 37 Essential Mathematics for Computational Design 図(30):2 次 NURBS 曲線の分析 ウェイト(重み) 制御点におけるウェイトの値は、均一な NURBS 曲線の場合は、”1”です。この値は、 有理 NURBS の場合は値が変わります。次の例は、Grasshopper において、インタラ クティブに、制御点におけるウェイトの値を変更するものです。 図(31):NURBS 曲線のウェイトを分析 38 Essential Mathematics for Computational Design NURBS曲面(サーフェス) NURBS サーフェスは、2 方向に伸びる NURBS 曲線の格子だと考えることができま す。NURBS サーフェスの形状は、2 つの方向(U 方向と V 方向)に配置された制御 点の数と次数によって定義されます。 図(31):NURBS サーフェスの定義域 NURBS サーフェスは、トリムされている場合とトリムされていない場合があります。 トリムサーフェスは基底の NURBS サーフェスと、そのサーフェス上にある特定の形 状を切り取る閉じた曲線から構成されます。それぞれのサーフェスは、サーフェスの 境界(外側のループ)を定義する閉じた曲線と、穴を定義する交差していない閉じた 内側の曲線(内側のループ)を持ちます。外側のループが基底の NURBS サーフェス の外側のループと同じで、穴がないサーフェスは非トリムサーフェスと呼びます。 図(32):トリムされた NURBS サーフェス 左のサーフェスはトリムされていません。右のサーフェスは、同じサーフェスをだ円 形の穴でトリムしたものです。トリムしてもサーフェスの NURBS の構造は変わりま せん。 NURBSサーフェスの特徴 NURBS サーフェスは、もう 1 つ方向があるという以外 NURBS 曲線によく似ていま す。 NURBS サーフェスには下の情報を保持します。 次元(通常は 3) u および v 方向の次数(時として階数(次数+1)を用います。) u および v 方向の制御点 ノットベクトル(数値の 2D 配列) 39 Essential Mathematics for Computational Design サーフェスが有理かどうかの指定 NURBS 曲線と同じく、3D モデラーに作成ツールの一式が通常あるので、NURBS サ ーフェスの作成については詳しく知る必要はありません。サーフェス(曲線も)は、 新しい次数と新しい制御点の数でリビルド(再構築)することもできます。また、サ ーフェスには開いた、閉じた、周期などのタイプがあります。下に挙げるのは、異な る次数、制御点の数を持つ、または開いた、周期など、サーフェスのいくつかの例で す。 40 Essential Mathematics for Computational Design u および v 方向の両方向で次数 1 のサーフ ェス。すべての制御点はサーフェスの上に 位置します。 u 方向に次数 3、v 方向に次数 1 の開いたサ ーフェス。 コーナー(角)の制御点がサーフェスの角 と一致しています。 u 方向に次数 3、v 方向に次数 1 の閉じた (非周期)サーフェス。 サーフェスのシームと同じ位置にある制御 点があります。 閉じた(非周期)サーフェスの制御点を移 動すると、キンクが発生し、サーフェスは 滑らかに見えなくなります。 41 Essential Mathematics for Computational Design u 方向に次数 3、v 方向に次数 1 の周期サー フェス。 サーフェスの制御点の位置は、サーフェス のシームの位置と一致しません。 周期サーフェスの制御点は移動してもサー フェスの滑らかさに影響せず、キンクも発 生しません。 ポリサーフェス ポリサーフェスは、複数の NURBS サーフェス(トリムサーフェスの場合もある)を 結合して構成されています。それぞれのサーフェスは、固有のパラメーターと一致し なくてもよい UV 方向を持ちます。ポリサーフェスとトリムサーフェスは、境界表現 (Brep:ビーレップ)と呼ばれるもので定義されます。境界表現は基本的にサーフェ ス、エッジ、頂点等の幾何要素をトリムデータや異なるパーツ間との関係とともに記 述します。例えば、それぞれの面、それを囲むエッジやトリム、サーフェスに対する 法線方向、隣り合う面との関係等です。Brep は、閉じた状態(隙間がない状態)の時 は、ソリッドとも呼ばれます。 下のボックス(直方体)の場合、6 つの非トリムサーフェスが結合されて作られてい ます。 図(33):結合された NURBS サーフェスで作られたポリサーフェス 42 Essential Mathematics for Computational Design トリムされたサーフェスが結合されてできているポリサーフェスも多くあります。例 えば、下の円柱の場合、上と下(底)の面は平面サーフェスをトリムしてできたもの です。 図(34):ポリサーフェスの面はトリムされた NURBS サーフェスである場合もある これまでに説明したように、NURBS 曲線やサーフェスの編集は、非常に直感的で、 制御点を動かすことでインタラクティブに行えます。しかし、ポリサーフェスを編集 し、異なる面の結合エッジを維持するのは、直感的ではありません。3D NURBS モデ ラーによってポリサーフェスを直接編集、または変形するツールが提供されています が、ポリサーフェスをその構成要素のサーフェスに分解して編集し、結合しなおすこ とも一般的です。その場合、うまく結合するために許容差内でエッジを正しく合うよ うに維持することが大切です。 例 直方体に丸い穴を作成する手順を紹介します。 43 Essential Mathematics for Computational Design 直方体と、穴の位置、そして直径を示す円 を用意します。 円を直方体に投影します。 投影された円を用いて、直方体の上と下の 面をトリムします。 投影された円を使用してそれらの間に巻い たサーフェスを作成します。 トリムされたサーフェスと穴の壁を結合し ます。 44 Essential Mathematics for Computational Design 引用文献 Edward Angel, "Interactive Computer Graphics with OpenGL,” Addison Wesley Longman, Inc., 2000. James D Foley, Steven K Feiner, John F Hughes, "Introduction to Computer Graphics" Addison-Wesley Publishing Company, Inc., 1997. James Stewart, "Calculus," Wadsworth, Inc, 1991. Kenneth Hoffman, Ray Kunze, “Linear Algabra”, Prentice-Hall, Inc., 1971 Rhinoceros® help document, Robert McNeel and Associates, 2009. 45
© Copyright 2024 ExpyDoc