jp.go.ipa.jgcl
クラス JgclFreeformSurfaceWithControlPoints3D

java.lang.Object
  |
  +--jp.go.ipa.jgcl.JgclGeometry
        |
        +--jp.go.ipa.jgcl.JgclParametricSurface
              |
              +--jp.go.ipa.jgcl.JgclParametricSurface3D
                    |
                    +--jp.go.ipa.jgcl.JgclBoundedSurface3D
                          |
                          +--jp.go.ipa.jgcl.JgclFreeformSurfaceWithControlPoints3D
すべての実装インタフェース:
java.io.Serializable
直系の既知のサブクラス:
JgclBsplineSurface3D, JgclPureBezierSurface3D

public abstract class JgclFreeformSurfaceWithControlPoints3D
extends JgclBoundedSurface3D

3次元 : 制御点を持った自由曲面を表す抽象クラス。

このクラスのインスタンスは、 制御点 (JgclPoint3D) の2次元配列 controlPoints と 重み (double) の2次元配列 weights を持つ。

points および mesh は、U 方向のインデックスが先、V 方向のインデックスが後。 つまり、U 方向に i 番目、V 方向に j 番目の制御点の情報は points[i][j], weights[i][j] に格納される。

weights が null の場合には非有理曲面 (多項式曲面) を表す。

weights に配列が設定されている場合には有理曲面を表す。 weights[i][j] は controlPoints[i][j] に対応する。 なお、いまのところ weights[i][j] の値は正でなければならない。

バージョン:
$Revision: 1.23 $, $Date: 2000/08/11 06:18:49 $
作成者:
Information-technology Promotion Agency, Japan
関連項目:
直列化された形式

フィールドの概要
protected  JgclPoint3D[][] controlPoints
          制御点の2次元配列。
protected  double[][] weights
          重みの2次元配列。
 
コンストラクタの概要
protected JgclFreeformSurfaceWithControlPoints3D()
          何も与えずにオブジェクトを構築する。
protected JgclFreeformSurfaceWithControlPoints3D(double[][][] cpArray)
          制御点(と重み)を3次元配列として与えて多項式/有理曲面を構築する
protected JgclFreeformSurfaceWithControlPoints3D(double[][][] cpArray, boolean doCheck)
          制御点 (と重み) を三次元配列で与えて 多項式曲面 (あるいは有理曲面) としてオブジェクトを構築する。
protected JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][] controlPoints)
          制御点列を与えて多項式曲面としてオブジェクトを構築する。
protected JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][] controlPoints, double[][] weights)
          制御点列と重み列を与えて有理曲面としてオブジェクトを構築する。
protected JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][] controlPoints, double[][] weights, boolean doCheck)
          制御点列と重み列を与えて 多項式曲面あるいは有理曲面としてオブジェクトを構築する。
 
メソッドの概要
protected static double[][][] allocateDoubleArray(boolean isPoly, int uSize, int vSize)
          与えられた数の制御点の成分を格納する「実数の三次元配列」の領域を獲得する。
 JgclPoint3D controlPointAt(int i, int j)
          この曲面の (i, j) 番目の制御点を返す。
 JgclPoint3D[][] controlPoints()
          この曲面の制御点の2次元配列を返す。
protected  void convRational0Deriv(double[] d0)
          同次座標で与えられた (曲面上の) 点を X/Y/Z/W 成分に変換する。
protected  void convRational1Deriv(double[] d0, double[] du, double[] dv)
          同次座標で与えられた曲面上の点と一次偏導関数を X/Y/Z/W 成分に変換する。
protected  void convRational2Deriv(double[] d0, double[] du, double[] dv, double[] duu, double[] duv, double[] dvv)
          同次座標で与えられた曲面上の点/一次偏導関数/二次偏導関数を X/Y/Z/W 成分に変換する。
 boolean isFreeform()
          この幾何要素が自由形状か否かを返す。
 boolean isPolynomial()
          この曲面が多項式形式か否かを返す。
 boolean isRational()
          この曲面が有理形式か否かを返す。
 double[][] makeUniformWeights()
          この曲面の制御点の数に等しい均一な重み列を返す。
 int nControlPoints()
          この曲面の制御点の総数を返す。
protected  void setCoordinatesToDoubleArray(boolean isPoly, int uUicp, int vUicp, double[][][] doubleArray)
          この曲面の制御点 (および重み) の成分を、与えられた三次元配列の要素に代入する。
protected  double[][][] toDoubleArray(boolean isPoly)
           
 int uNControlPoints()
          この曲面の U 方向の制御点の数を返す。
 int vNControlPoints()
          この曲面の V 方向の制御点の数を返す。
 double weightAt(int i, int j)
          この曲面の (i, j) 番目の重みを返す。
 double[][] weights()
          この曲面の重みの2次元配列を返す。
 
クラス jp.go.ipa.jgcl.JgclBoundedSurface3D から継承したメソッド
fillet, offsetByBsplineSurface, toBsplineSurface, toMesh
 
クラス jp.go.ipa.jgcl.JgclParametricSurface3D から継承したメソッド
coordinates, curvature, dimension, doTransformBy, evaluation, fillet, intersect, intersect, is3D, nearestProjectFrom, nearestProjectWithDistanceFrom, normalVector, offsetByBsplineSurface, pointToParameter, projectFrom, reverseTransformBy, tangentVector, toBsplineSurface, toMesh, toNonStructuredPoints, transformBy, transformBy, uIsoParametricCurve, vIsoParametricCurve
 
クラス jp.go.ipa.jgcl.JgclParametricSurface から継承したメソッド
checkUValidity, checkUValidity, checkVValidity, checkVValidity, isParametric, isSurface, isUFinite, isUInfinite, isUNonPeriodic, isUPeriodic, isValidUParameter, isValidVParameter, isVFinite, isVInfinite, isVNonPeriodic, isVPeriodic, uParameterDomain, vParameterDomain
 
クラス jp.go.ipa.jgcl.JgclGeometry から継承したメソッド
getClassName, getToleranceForAngle, getToleranceForAngleAsObject, getToleranceForDistance, getToleranceForDistance2, getToleranceForDistanceAsObject, getToleranceForParameter, getToleranceForParameterAsObject, getToleranceForRealNumber, getToleranceForRealNumberAsObject, is1D, is2D, isCurve, isPlacement, isPoint, isTransformationOperator, isVector, makeIndent, output, output
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

controlPoints

protected JgclPoint3D[][] controlPoints
制御点の2次元配列。

weights

protected double[][] weights
重みの2次元配列。

多項式曲面であれば null とする。

コンストラクタの詳細

JgclFreeformSurfaceWithControlPoints3D

protected JgclFreeformSurfaceWithControlPoints3D()
何も与えずにオブジェクトを構築する。

各フィールドには値を設定しない。


JgclFreeformSurfaceWithControlPoints3D

protected JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][] controlPoints)
制御点列を与えて多項式曲面としてオブジェクトを構築する。

以下のいずれかの場合には、JgclInvalidArgumentValue の例外を発生する。

パラメータ:
controlPoints - 制御点の2次元配列
関連項目:
JgclInvalidArgumentValue

JgclFreeformSurfaceWithControlPoints3D

protected JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][] controlPoints,
                                                 double[][] weights)
制御点列と重み列を与えて有理曲面としてオブジェクトを構築する。

以下のいずれかの場合には、JgclInvalidArgumentValue の例外を発生する。

パラメータ:
controlPoints - 制御点の2次元配列
weights - 重みの2次元配列
関連項目:
JgclInvalidArgumentValue

JgclFreeformSurfaceWithControlPoints3D

protected JgclFreeformSurfaceWithControlPoints3D(double[][][] cpArray)
制御点(と重み)を3次元配列として与えて多項式/有理曲面を構築する
パラメータ:
cpArray - 制御点、重みを表す配列

JgclFreeformSurfaceWithControlPoints3D

protected JgclFreeformSurfaceWithControlPoints3D(double[][][] cpArray,
                                                 boolean doCheck)
制御点 (と重み) を三次元配列で与えて 多項式曲面 (あるいは有理曲面) としてオブジェクトを構築する。

cpArray の長さを U 方向の制御点の数、 cpArray[0] の長さを V 方向の制御点の数とする。 また、cpArray[0][0] の長さが 3 であれば多項式曲面、4 であれば有理曲面とする。

cpArray[i][j] の長さが 3 の場合、 cpArray[i][j][0] は (i, j) 番目の制御点の X 成分、 cpArray[i][j][1] は (i, j) 番目の制御点の Y 成分、 cpArray[i][j][2] は (i, j) 番目の制御点の Z 成分 を示すものとする。

cpArray[i][j] の長さが 4 の場合、 cpArray[i][j][0] は ((i, j) 番目の制御点の X 成分 * (i, j) 番目の重み)、 cpArray[i][j][1] は ((i, j) 番目の制御点の Y 成分 * (i, j) 番目の重み)、 cpArray[i][j][2] は ((i, j) 番目の制御点の Z 成分 * (i, j) 番目の重み)、 cpArray[i][j][3] は (i, j) 番目の重み を示すものとする。

doCheck が true の場合、以下のチェックを行なう。

以下のいずれかの場合には、JgclInvalidArgumentValue の例外を発生する。

  • U 方向の制御点の数が 2 より小さい
  • V 方向の制御点の数が 2 より小さい
  • ある重みの値が正でない
  • ある重みの値 w について、 (w / (重み列内の最大値)) が JgclMachineEpsilon.DOUBLE より小さくなる。

パラメータ:
cpArray - 制御点 (および重み) の配列
doCheck - 引数のチェックを行なうかどうか
関連項目:
JgclInvalidArgumentValue

JgclFreeformSurfaceWithControlPoints3D

protected JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][] controlPoints,
                                                 double[][] weights,
                                                 boolean doCheck)
制御点列と重み列を与えて 多項式曲面あるいは有理曲面としてオブジェクトを構築する。

doCheck が false の場合、 与えられた controlPoints および weights の値を 対応するフィールドにそのまま設定する。 ここで weights が null であれば、曲面は非有理 (多項式) 形式になる。 なお、controlPoints に null が与えられると、予期できない結果を招く。

doCheck が true の場合、 weights が値を持てば JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][], double[][])、 weights が null であれば JgclFreeformSurfaceWithControlPoints3D(JgclPoint3D[][]) と同様の処理を行なう。

パラメータ:
controlPoitns - 制御点の配列
weights - 重みの配列
doCheck - 引数のチェックを行なうかどうか
メソッドの詳細

controlPoints

public JgclPoint3D[][] controlPoints()
この曲面の制御点の2次元配列を返す。
戻り値:
制御点の2次元配列

controlPointAt

public JgclPoint3D controlPointAt(int i,
                                  int j)
この曲面の (i, j) 番目の制御点を返す。
パラメータ:
i - U 方向のインデックス (i 番目)
j - V 方向のインデックス (j 番目)
戻り値:
制御点

weights

public double[][] weights()
この曲面の重みの2次元配列を返す。

曲面が多項式曲面の場合は null を返す。

戻り値:
重みの2次元配列

weightAt

public double weightAt(int i,
                       int j)
この曲面の (i, j) 番目の重みを返す。

曲面が多項式曲面の場合には JgclInvalidArgumentValue の例外を投げる。

パラメータ:
i - U 方向のインデックス (i 番目)
j - V 方向のインデックス (j 番目)
戻り値:
重み
関連項目:
JgclInvalidArgumentValue

uNControlPoints

public int uNControlPoints()
この曲面の U 方向の制御点の数を返す。
戻り値:
U 方向の制御点の数
関連項目:
vNControlPoints(), nControlPoints()

vNControlPoints

public int vNControlPoints()
この曲面の V 方向の制御点の数を返す。
戻り値:
V 方向の制御点の数
関連項目:
uNControlPoints(), nControlPoints()

nControlPoints

public int nControlPoints()
この曲面の制御点の総数を返す。

(U 方向の制御点の数 * V 方向の制御点の数) を返す。

戻り値:
制御点の総数
関連項目:
uNControlPoints(), vNControlPoints()

isRational

public boolean isRational()
この曲面が有理形式か否かを返す。
戻り値:
有理形式ならば true、そうでなければ false

isPolynomial

public boolean isPolynomial()
この曲面が多項式形式か否かを返す。
戻り値:
多項式形式ならば true、そうでなければ false

allocateDoubleArray

protected static double[][][] allocateDoubleArray(boolean isPoly,
                                                  int uSize,
                                                  int vSize)
与えられた数の制御点の成分を格納する「実数の三次元配列」の領域を獲得する。
パラメータ:
isPoly - 多項式形式か否か
uSize - 配列の第一次元の要素数 (U 方向の制御点の数)
vSize - 配列の第二次元の要素数 (V 方向の制御点の数)
戻り値:
制御点の成分を格納する配列

setCoordinatesToDoubleArray

protected void setCoordinatesToDoubleArray(boolean isPoly,
                                           int uUicp,
                                           int vUicp,
                                           double[][][] doubleArray)
この曲面の制御点 (および重み) の成分を、与えられた三次元配列の要素に代入する。

isPoly が true の場合、 doubleArray[i][j][0] は (i, j) 番目の制御点の X 成分、 doubleArray[i][j][1] は (i, j) 番目の制御点の Y 成分 doubleArray[i][j][2] は (i, j) 番目の制御点の Z 成分 を表す。

isPoly が false の場合、 doubleArray[i][j][0] は ((i, j) 番目の制御点の X 成分 * (i, j) 番目の重み)、 doubleArray[i][j][1] は ((i, j) 番目の制御点の Y 成分 * (i, j) 番目の重み)、 doubleArray[i][j][2] は ((i, j) 番目の制御点の Z 成分 * (i, j) 番目の重み)、 doubleArray[i][j][3] は (i, j) 番目の重み を表す。

パラメータ:
isPoly - 多項式形式か否か
uUicp - 配列の第一次元の要素数 (配列に値を代入する U 方向の制御点の数)
vUicp - 配列の第二次元の要素数 (配列に値を代入する V 方向の制御点の数)
doubleArray - 制御点の成分を格納する三次元配列

toDoubleArray

protected double[][][] toDoubleArray(boolean isPoly)

convRational0Deriv

protected void convRational0Deriv(double[] d0)
同次座標で与えられた (曲面上の) 点を X/Y/Z/W 成分に変換する。

(wx, wy, wz, w) で与えられた (曲面上の) 点を (x, y, z, w) に変換する。

パラメータ:
d0 - 曲面上の点

convRational1Deriv

protected void convRational1Deriv(double[] d0,
                                  double[] du,
                                  double[] dv)
同次座標で与えられた曲面上の点と一次偏導関数を X/Y/Z/W 成分に変換する。

(wx, wy, wz, w) で与えられた曲面上の点と一次偏導関数を (x, y, z, w) に変換する。

パラメータ:
d0 - 曲面上の点
du - U 方向の一次偏導関数
dv - V 方向の一次偏導関数

convRational2Deriv

protected void convRational2Deriv(double[] d0,
                                  double[] du,
                                  double[] dv,
                                  double[] duu,
                                  double[] duv,
                                  double[] dvv)
同次座標で与えられた曲面上の点/一次偏導関数/二次偏導関数を X/Y/Z/W 成分に変換する。

(wx, wy, wz, w) で与えられた曲面上の点/一次偏導関数/二次偏導関数を (x, y, z, w) に変換する。

パラメータ:
d0 - 曲面上の点
du - U 方向の一次偏導関数
dv - V 方向の一次偏導関数
duv - U 方向の二次偏導関数
duv - UV 方向の一次混合偏導関数
dvv - V 方向の二次偏導関数

isFreeform

public boolean isFreeform()
この幾何要素が自由形状か否かを返す。
オーバーライド:
クラス JgclGeometry 内の isFreeform
戻り値:
常に true

makeUniformWeights

public double[][] makeUniformWeights()
この曲面の制御点の数に等しい均一な重み列を返す。

結果として得られる配列の各要素の値は 1 である。

戻り値:
重みの配列