/** * 数学ユーティリティー * * 数学関連の関数または定数を定義するユーティリティークラスである。 * このクラスは static メンバーしか持たない。 */ declare class GeoMath { /** * @ignore */ constructor(); /** * 行列オブジェクトを作成 * * mat を複製する。ただし mat を省略したときは、すべての要素が 0 の行列を生成する。 * * @param mat 入力行列 * @return 新しい行列 */ static createMatrix(mat?: Matrix): Matrix; /** * 行列 (単精度) オブジェクトを作成 * * @param mat 入力行列 * @return 新しい行列 * @hidden */ static createMatrixf(mat?: Matrix): Matrix; /** * 4 次ベクトルの生成 * * vec を複製して 4 次ベクトルを生成する。ただし vec を省略したときは、すべての要素が 0 のベクトルを生成する。 * @param vec 入力ベクトル * @return 新しいベクトル */ static createVector4(vec?: Vector4): Vector4; /** * 4 次ベクトル (単精度) の生成 * @param vec 入力ベクトル * @return 新しいベクトル * @hidden */ static createVector4f(vec?: Vector4): Vector4; /** * 3 次ベクトルの生成 * vec を複製して 3 次ベクトルを生成する。ただし vec を省略したときは、すべての要素が 0 のベクトルを生成する。 * @param vec 入力ベクトル * @return 新しいベクトル */ static createVector3(vec?: Vector3): Vector3; /** * 3 次ベクトル (単精度) の生成 * @param vec 入力ベクトル * @return 新しいベクトル * @hidden */ static createVector3f(vec?: Vector3): Vector3; /** * 2 次ベクトルの生成 * vec を複製して 2 次ベクトルを生成する。ただし vec を省略したときは、すべての要素が 0 のベクトルを生成する。 * @param vec 入力ベクトル * @return 新しいベクトル */ static createVector2(vec?: Vector2): Vector2; /** * 2 次ベクトル (単精度) の生成 * @param vec 入力ベクトル * @return 新しいベクトル * @hidden */ static createVector2f(vec?: Vector2): Vector2; /** * 行列を代入 * * src を dst に代入する。 * @param src 代入元 * @param dst 代入先 * @return dst */ static copyMatrix(src: Matrix, dst: Matrix): Matrix; /** * 4 次ベクトルを代入 * * src を dst に代入する。 * @param src 代入元 * @param dst 代入先 * @return dst */ static copyVector4(src: Vector4, dst: Vector4): Vector4; /** * 3 次ベクトルを代入 * * src を dst に代入する。 * @param src 代入元 * @param dst 代入先 * @return dst */ static copyVector3(src: Vector3 | Vector4, dst: T): T; /** * 2 次ベクトルを代入 * * src を dst に代入する。 * @param src 代入元 * @param dst 代入先 * @return dst */ static copyVector2(src: Vector2 | Vector3 | Vector4, dst: T): T; /** * 恒等行列を設定 * @param dst 結果を代入する行列 * @return dst */ static setIdentity(dst: Matrix): Matrix; /** * 2 次ベクトルの長さの2乗を計算 * @param vec ベクトル * @return ベクトルの長さの2乗 */ static lengthSquared2(vec: Vector2): number; /** * 3 次ベクトルの長さの2乗を計算 * @param vec ベクトル * @return ベクトルの長さの2乗 */ static lengthSquared3(vec: Vector3): number; /** * 4 次ベクトルの長さの2乗を計算 * @param vec ベクトル * @return ベクトルの長さの2乗 */ static lengthSquared4(vec: Vector4): number; /** * 2 次ベクトルの長さを計算 * @param vec ベクトル * @return ベクトルの長さ */ static length2(vec: Vector2): number; /** * 3 次ベクトルの長さを計算 * @param vec ベクトル * @return ベクトルの長さ */ static length3(vec: Vector3): number; /** * 4 次ベクトルの長さを計算 * @param vec ベクトル * @return ベクトルの長さ */ static length4(vec: Vector4): number; /** * 2 次ベクトルの和を計算 * @param a 左のベクトル * @param b 右のベクトル * @param dst 計算結果を格納するバッファ * @return a と b の和 */ static add2(a: Vector2, b: Vector2, dst: Vector2): Vector2; /** * 3 次ベクトルの和を計算 * @param a 左のベクトル * @param b 右のベクトル * @param dst 計算結果を格納するバッファ * @return a と b の和 */ static add3(a: Vector3, b: Vector3, dst: Vector3): Vector3; /** * 2 次ベクトルの差を計算 * @param a 左のベクトル * @param b 右のベクトル * @param dst 計算結果を格納するバッファ * @return a と b の差 */ static sub2(a: Vector2, b: Vector2, dst: Vector2): Vector2; /** * 3 次ベクトルの差を計算 * @param a 左のベクトル * @param b 右のベクトル * @param dst 計算結果を格納するバッファ * @return a と b の差 */ static sub3(a: Vector3, b: Vector3, dst: Vector3): Vector3; /** * 2 次ベクトルの内積を計算 * @param a 左のベクトル * @param b 右のベクトル * @return a と b の内積 */ static dot2(a: Vector2, b: Vector2): number; /** * 3 次ベクトルの内積を計算 * @param a 左のベクトル * @param b 右のベクトル * @return a と b の内積 */ static dot3(a: Vector3, b: Vector3): number; /** * 4 次ベクトルの内積を計算 * @param a 左のベクトル * @param b 右のベクトル * @return a と b の内積 */ static dot4(a: Vector4, b: Vector4): number; /** * 3次ベクトルの外積を計算 * @param a 左のベクトル * @param b 右のベクトル * @param dst a と b の外積を代入するベクトル * @return dst */ static cross3(a: Vector3, b: Vector3, dst: Vector3): Vector3; /** * 2次ベクトルの正規化を計算 * @param vec ベクトル * @param dst 正規化された値を代入するベクトル * @return dst */ static normalize2(vec: Vector2, dst: Vector2): Vector2; /** * 3次ベクトルの正規化を計算 * @param vec ベクトル * @param dst 正規化された値を代入するベクトル * @return dst */ static normalize3(vec: Vector3, dst: Vector3): Vector3; /** * 4次ベクトルの正規化を計算 * @param vec ベクトル * @param dst 正規化された値を代入するベクトル * @return dst */ static normalize4(vec: Vector4, dst: Vector4): Vector4; /** * 2次ベクトルのスカラ倍を計算 * @param a スカラ * @param vec ベクトル * @param dst 計算結果を代入するベクトル * @return dst */ static scale2(a: number, vec: Vector2, dst: Vector2): Vector2; /** * 3次ベクトルのスカラ倍を計算 * @param a スカラ * @param vec ベクトル * @param dst 計算結果を代入するベクトル * @return dst */ static scale3(a: number, vec: Vector3, dst: Vector3): Vector3; /** * 4次ベクトルのスカラ倍を計算 * @param a スカラ * @param vec ベクトル * @param dst 計算結果を代入するベクトル * @return dst */ static scale4(a: number, vec: Vector4, dst: Vector4): Vector4; /** * 2次ベクトルの線形補間を計算 * @param a ベクトル * @param b ベクトル * @param t 補間パラメータ * @param dst 計算結果を代入するベクトル * @return dst */ static linearInterpolate2(a: Vector2, b: Vector2, t: number, dst: Vector2): Vector2; /** * 3次ベクトルの線形補間を計算 * @param a ベクトル * @param b ベクトル * @param t 補間パラメータ * @param dst 計算結果を代入するベクトル * @return dst */ static linearInterpolate3(a: Vector3, b: Vector3, t: number, dst: Vector3): Vector3; /** * 4次ベクトルの線形補間を計算 * @param a ベクトル * @param b ベクトル * @param t 補間パラメータ * @param dst 計算結果を代入するベクトル * @return dst */ static linearInterpolate4(a: Vector4, b: Vector4, t: number, dst: Vector4): Vector4; /** * 行列の積を計算 (アフィン変換 x アフィン変換) * @param a 左の行列 * @param b 右の行列 * @param dst 結果を代入する行列 * @return dst */ static mul_AA(a: Matrix, b: Matrix, dst: Matrix): Matrix; /** * 行列の積を計算 (一般変換 x アフィン変換) * @param a 左の行列 * @param b 右の行列 * @param dst 結果を代入する行列 * @return dst */ static mul_GA(a: Matrix, b: Matrix, dst: Matrix): Matrix; /** * 行列の積を計算 (投影変換 x アフィン変換) * @param a 左の行列 * @param b 右の行列 * @param dst 結果を代入する行列 * @return dst */ static mul_PzA(a: Matrix, b: Matrix, dst: Matrix): Matrix; /** * 逆行列を計算 (アフィン変換) * @param mat 行列 * @param dst 結果を代入する行列 * @return dst */ static inverse_A(mat: Matrix, dst: Matrix): Matrix; /** * 位置を変換 (アフィン変換) * * 位置 pos を変換行列 mat により座標変換して dst に代入する。 * * mat は pos が想定する座標系から、ある座標系へ位置ベクトルを変換するための行列である。 * * @param mat 変換行列 * @param pos 位置 * @param dst 結果を代入するベクトル * * @return dst */ static transformPosition_A(mat: Matrix, pos: (Vector2 | Vector3), dst: T): T; /** * 方向を変換 (アフィン変換) * * 方向 dir を変換行列 mat により座標変換して dst に代入する。 * * mat は dir が想定する座標系から、ある座標系へ方向ベクトルを変換するための行列である。 * * @param mat 変換行列 * @param dir 方向 * @param dst 結果を代入するベクトル * * @return dst */ static transformDirection_A(mat: Matrix, dir: Vector3, dst: Vector3): Vector3; /** * 平面ベクトルを変換 (アフィン変換) * * mat には平面ベクトルを変換する行列を指定する。 * 位置ベクトルを変換する行列が M なら、平面ベクトルを変換する行列は M-1 を指定する。 * * dst には plane * mat が代入される。 * * @param mat 変換行列 * @param plane 平面ベクトル * @param dst 結果を代入するベクトル * @return dst */ static transformPlane_A(mat: Matrix, plane: Vector4, dst: Vector4): Vector4; /** * 平面ベクトルの正規化を計算 * * 法線部 (最初の 3 要素) の長さが 1 になるように平面ベクトル plane を正規化し、dst に代入する。 * * @param plane 平面ベクトル * @param dst 正規化された値を代入するベクトル * * @return dst */ static normalizePlane(plane: Vector4, dst: Vector4): Vector4; /** * 座標変換行列を計算 (Inou 球面座標系 → 地心直交座標系) * * 原点が position の直交座標系 (LOCS) から地心直交座標系 (GOCS) に変換する行列を計算する。 * position.height + GeoMath.EARTH_RADIUS > 0 かつ position.latitude == 0 のとき、LOCS の Z 軸は上方向、Y 軸は北方向、X 軸は東方向となる。 * * @param position 位置 (Inou 球面座標系) * @param dst 結果を代入する行列 * @return dst * * @deprecated {@link mapray.GeoPoint.getMlocsToGocsMatrix} の使用を推奨 */ static iscs_to_gocs_matrix(position: GeoPointData, dst: Matrix): Matrix; /** * 地心直交座標を Inou 球面座標に変換 * * @param src 入力 GOCS 座標 (Meters) * @param dst 出力 ISCS 座標 * @return dst * * @deprecated {@link mapray.GeoPoint.setFromGocs} の使用を推奨 */ static gocs_to_iscs(src: Vector3, dst: GeoPointData): GeoPointData; /** * 座標変換行列を計算 (視点座標系 → クリップ同次座標系) * @param left * @param right * @param bottom * @param top * @param nearVal * @param farVal * @param dst 結果を代入する行列 * @return dst * * @see https://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml */ static frustum_matrix(left: number, right: number, bottom: number, top: number, nearVal: number, farVal: number, dst: Matrix): Matrix; /** * 座標変換行列を計算 (右手座標系 → 視点座標系) * * @param eye 視点の位置 * @param center 注視点の位置 * @param up 上方向ベクトル * @param dst 結果を代入する行列 * @return dst */ static lookat_matrix(eye: Vector3, center: Vector3, up: Vector3, dst: Matrix): Matrix; /** * 任意軸回りの回転行列 * * axis を Z 軸方向とすると、X 軸から Y 軸の方向に angle 度回転させる変換行列を返す。 * @param axis 回転軸 (単位ベクトル) * @param angle 回転角 (Degrees) * @param dst 結果を代入する行列 * @return dst */ static rotation_matrix(axis: Vector3, angle: number, dst: Matrix): Matrix; /** * KML 互換のモデル変換行列 * * 変換は scale -> roll -> tilt -> heading の順に行われる。 * * @param heading Z 軸を中心に Y 軸から X 軸の方向の回転角 (Degrees) * @param tilt X 軸を中心に Z 軸から Y 軸の方向の回転角 (Degrees) * @param roll Y 軸を中心に X 軸から Z 軸の方向の回転角 (Degrees) * @param scale スケール * @param dst 結果を代入する行列 * @return dst * * @package * @see https://developers.google.com/kml/documentation/kmlreference#model * * @deprecated {@link mapray.Orientation.getTransformMatrix} の使用を推奨 */ static kml_model_matrix(heading: number, tilt: number, roll: number, scale: Vector3, dst: Matrix): Matrix; /** * グーデルマン関数 * @param x 数値 * @return gd( x ) */ static gudermannian(x: number): number; /** * 逆グーデルマン関数 * @param x 数値 * @return gd-1( x ) */ static invGudermannian(x: number): number; /** * 値を指定区間内に制限 * @param x 値 * @param min 最小値 * @param max 最大値 * @return min <= x <= max のとき x, x < min のとき min, x > max のとき max */ static clamp(x: number, min: number, max: number): number; /** * 地球の半径 * * Inou 球面座標系で定義された、地球の半径 (Meters) である。 */ static readonly EARTH_RADIUS: number; /** * 1度に対応するラジアンの数値 * * この数値は `π / 180` である。 * 度数を DEGREE で掛け合せることによってラジアンに変換することができる。 */ static readonly DEGREE: number; /** * log2(π) */ static readonly LOG2PI: number; private static _xaxis; private static _yaxis; private static _zaxis; /** * 2次ベクトルであるかを判定 */ static isVector2(vec: Vector2 | Vector3 | Vector4): vec is Vector2; /** * 3次ベクトルであるかを判定 */ static isVector3(vec: Vector2 | Vector3 | Vector4): vec is Vector3; /** * 4次ベクトルであるかを判定 */ static isVector4(vec: Vector2 | Vector3 | Vector4): vec is Vector4; /** * 任意軸周りに回転する四元数を計算 * @param axis 回転軸 * @param angle 回転角 (Degrees) * @param dst  結果を代入する四元数 * @return dst */ static rotation_quat(axis: Vector3, angle: number, dst: Vector4): Vector4; /** * 行列と同じ回転を表す四元数を計算 * @param mat 行列 * @param dst  結果を代入する四元数 * @return dst */ static matrix_to_quat(mat: Matrix, dst: Vector4): Vector4; /** * 四元数と同じ回転を表す行列を計算。 * 平行移動成分は (0, 0, 0) になります。 * @param scale スケール * @param quat 四元数 * @param dst  結果を代入する行列 * @return dst */ static quat_to_matrix(scale: Vector3, quat: Vector4, dst: Matrix): Matrix; /** * 四元数の積を計算 * @param p 左の四元数 * @param q 右の四元数 * @param dst  結果を代入する四元数 * @return dst */ static mul_quat(p: Vector4, q: Vector4, dst: Vector4): Vector4; /** * 四元数の複素共役を計算 * @param q 四元数 * @param dst  結果を代入する四元数 * @return dst */ static conjugate_quat(q: Vector4, dst: Vector4): Vector4; /** * 逆四元数の計算 * @param q 四元数 * @param dst  結果を代入する四元数 * @return dst */ static inverse_quat(q: Vector4, dst: Vector4): Vector4; /** * 球面線形補間を計算 * @param q1 四元数(単位ベクトル) * @param q2 四元数(単位ベクトル) * @param alpha 補間、0 ≤ alpha ≤ 1 * @param dst   結果を代入する四元数 * @return dst */ static slerp_quat(q1: Vector4, q2: Vector4, alpha: number, dst: Vector4): Vector4; } declare namespace GeoMath { /** * Math.log2 互換関数 * @see https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Math/log2 */ const maprayLog2: (x: number) => number; } /** * 地理的位置を表現するJSON形式。 */ type GeoPointData = { longitude: number; latitude: number; height: number; }; /** * 4行4列の行列 * * この型は実在しない便宜的なものであり、Array や TypedArray 等の 16 要素の配列に置き換えることができる。 * この配列の数値の並びは列優先である。 */ type Matrix = Float64Array | Float32Array | [ m00: number, m01: number, m02: number, m03: number, m10: number, m11: number, m12: number, m13: number, m20: number, m21: number, m22: number, m23: number, m30: number, m31: number, m32: number, m33: number ]; /** * 2次ベクトル `[x, y]` * * この型は実在しない便宜的なものであり、Array や TypedArray 等の 2 要素の配列に置き換えることができる。 */ type Vector2 = Float64Array | Float32Array | [x: number, y: number]; /** * 3次ベクトル `[x, y, z]` * * この型は実在しない便宜的なものであり、Array や TypedArray 等の 3 要素の配列に置き換えることができる。 * * - RGB色を表現する場合は `[red, green, blue]` に対応し、値の範囲は `0.0〜1.0` または `0〜255` で表現される({@link mapray.Color} 参照)。 */ type Vector3 = Float64Array | Float32Array | [x: number, y: number, z: number]; /** * 4次ベクトル `[x, y, z, w]` * * この型は実在しない便宜的なものであり、Array や TypedArray 等の 4 要素の配列に置き換えることができる。 * * - Quaternionを表現する場合は `[x, y, z, w]` に対応する(`w + xi + yj +zk`)。 * - RGBA色を表現する場合は `[red, green, blue, alpha]` に対応する。値は `0.0〜1.0` または `0〜255` で表現される({@link mapray.Color} 参照)。 */ type Vector4 = Float64Array | Float32Array | [x: number, y: number, z: number, w: number]; /** * 経度、緯度、高度により位置を表現する。 */ declare class GeoPoint { /** * 経度 (Degrees) */ longitude: number; /** * 緯度 (Degrees) */ latitude: number; /** * 高度 (Meters) */ altitude: number; /** * 経度、緯度、高度を与えてインスタンスを生成する。 * * @param longitude 経度 (Degrees) * @param latitude 緯度 (Degrees) * @param altitude 高度 (Meters) */ constructor(longitude?: number, latitude?: number, altitude?: number); /** * インスタンスを複製 * * this の複製を生成して返す。 * * @return this の複製 */ clone(): GeoPoint; /** * インスタンスを代入 * * src を this に代入する。 * * @param src 代入元 * @return this */ assign(src: GeoPoint): GeoPoint; /** * 配列からの設定 * * longitude, latitude, altitude の順序で格納されている配列 position によりプロパティを設定する。 * position の長さは 2 または 3 で、長さが 2 なら altitude は 0 に設定される。 * * @param position `[longitude, latitude, altitude]` または `[longitude, latitude]` * @return this */ setFromArray(position: Vector2 | Vector3): GeoPoint; /** * 地心直交座標からの設定 * * 地心直交座標 position を球面座標に変換して this に設定する。 * * @param position 入力 GOCS 座標 (Meters) * @return this */ setFromGocs(position: Vector3): GeoPoint; /** * 地心直交座標として取得 * * @param dst 結果を格納するオブジェクト * @return dst */ getAsGocs(dst: Vector3): Vector3; /** * 座標変換行列を計算 (MLOCS → GOCS) * * 原点が this の Mapray ローカル直交座標系 (MLOCS) から地心直交座標系 (GOCS) に変換する行列を計算する。 * * @param dst 結果を代入する行列 * @return dst */ getMlocsToGocsMatrix(dst: Matrix): Matrix; /** * 鉛直上方向のベクトルを計算 * * @param dst 結果を代入するオブジェクト * @return dst */ getUpwardVector(dst: Vector3): Vector3; /** * 地表面(高度0)での2地点間の距離を算出 * * GeoMath.DEGREE を半径とする真球として計算する。 * @param to * @return arc 距離(m) */ getGeographicalDistance(to: GeoPoint): number; /** * 球面座標を地心直交座標に変換 * * @param points `[lon_0, lat_0, alt_0, ...]` * @param num_points 点の数 * @param dst `[x0, y0, z0, ...]` (結果を格納する配列) * @return dst * * @see {@link mapray.GeoPoint.getAsGocs} */ static toGocsArray(points: Float64Array | Float32Array | number[], num_points: number, dst: T): T; } /** * 方向表現。 * heading (機首方位)、tilt (前後の傾き)、roll (左右の傾き) により方向を表現する。 * * [KML仕様](https://developers.google.com/kml/documentation/kmlreference#model) */ declare class Orientation { /** * 機首方位 (Degrees) * @type {number} */ heading: number; /** * 前後の傾き (Degrees) * @type {number} */ tilt: number; /** * 左右の傾き (Degrees) * @type {number} */ roll: number; /** * heading, tilt, roll に角度を与えてインスタンスを生成する。 * * @param heading 機首方位 (Degrees) * @param tilt 前後の傾き (Degrees) * @param roll 左右の傾き (Degrees) */ constructor(heading?: number, tilt?: number, roll?: number); /** * インスタンスを複製 * * this の複製を生成して返す。 * * @return this の複製 */ clone(): Orientation; /** * インスタンスを代入 * * src を this に代入する。 * * @param src 代入元 * @return this */ assign(src: Orientation): Orientation; /** * 変換行列を取得 * * 変換は scale -> roll -> tilt -> heading の順に行われる。 * * @param scale スケール * @param dst 結果を代入する行列 * @return dst */ getTransformMatrix(scale: Vector3, dst: Matrix): Matrix; } export default GeoMath; export { Vector2, Vector3, Vector4, Matrix, GeoPointData }; export { GeoPoint, Orientation, }; //# sourceMappingURL=GeoMath.d.ts.map