厄米樣條曲線是三次插值樣條曲線。必須為每個(gè)控制點(diǎn)定義點(diǎn)、傳入切線、傳出切線和時(shí)間。輸出切線是為點(diǎn)[0,n-2]定義的,而輸入切線是為點(diǎn)[1,n-1]定義的。例如,在
new HermiteSpline(options)
points[i]
和points[i + 1]
之間插入曲線段時(shí),點(diǎn)處的切線分別為outTangents[i]
和inTangents[i]
。
Parameters:
options
(Object)
Name | Description |
---|---|
options.times
Array.<Number>
|
在每個(gè)點(diǎn)上嚴(yán)格遞增的、無(wú)單位的浮點(diǎn)時(shí)間數(shù)組。這些值與時(shí)鐘時(shí)間沒(méi)有任何關(guān)系。它們是曲線的參數(shù)化。 |
options.points
Array.<Cartesian3>
|
Cartesian3 控制點(diǎn)數(shù)組。
|
options.inTangents
Array.<Cartesian3>
|
每個(gè)控制點(diǎn)的Cartesian3 輸入切線數(shù)組。
|
options.outTangents
Array.<Cartesian3>
|
每個(gè)控制點(diǎn)的Cartesian3 傳出切線數(shù)組。
|
Example
// Create a G<sup>1</sup> continuous Hermite spline
var times = [ 0.0, 1.5, 3.0, 4.5, 6.0 ];
var spline = new bmgl.HermiteSpline({
times : times,
points : [
new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
],
outTangents : [
new bmgl.Cartesian3(1125196, -161816, 270551),
new bmgl.Cartesian3(-996690.5, -365906.5, 184028.5),
new bmgl.Cartesian3(-2096917, 48379.5, -292683.5),
new bmgl.Cartesian3(-890902.5, 408999.5, -447115)
],
inTangents : [
new bmgl.Cartesian3(-1993381, -731813, 368057),
new bmgl.Cartesian3(-4193834, 96759, -585367),
new bmgl.Cartesian3(-1781805, 817999, -894230),
new bmgl.Cartesian3(1165345, 112641, 47281)
]
});
var p0 = spline.evaluate(times[0]);
Throws
-
DeveloperError : points.length必須大于或等于2。
-
DeveloperError : times.length必須等于points.length。
-
DeveloperError : 入口和出口的長(zhǎng)度必須等于points.length-1。
Members
(readonly) inTangents : Array.<Cartesian3>
每個(gè)控制點(diǎn)的
Cartesian3
輸入切線數(shù)組。
(readonly) outTangents : Array.<Cartesian3>
每個(gè)控制點(diǎn)的
Cartesian3
傳出切線數(shù)組。
(readonly) points : Array.<Cartesian3>
Cartesian3
控制點(diǎn)數(shù)組。
(readonly) times : Array.<Number>
控制點(diǎn)的時(shí)間數(shù)組。
Methods
(static) createC1(options) → {HermiteSpline}
在每個(gè)控制點(diǎn)的切線相同的情況下創(chuàng)建樣條曲線。曲線至少保證在C1級(jí)。
Parameters:
options
(Object)
Name | Description |
---|---|
options.times
Array.<Number>
|
控制點(diǎn)時(shí)間數(shù)組。 |
options.points
Array.<Cartesian3>
|
控制點(diǎn)數(shù)組。 |
options.tangents
Array.<Cartesian3>
|
控制點(diǎn)處的切線數(shù)組。 |
Example
var points = [
new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
];
// Add tangents
var tangents = new Array(points.length);
tangents[0] = new bmgl.Cartesian3(1125196, -161816, 270551);
var temp = new bmgl.Cartesian3();
for (var i = 1; i < tangents.length - 1; ++i) {
tangents[i] = bmgl.Cartesian3.multiplyByScalar(bmgl.Cartesian3.subtract(points[i + 1], points[i - 1], temp), 0.5, new bmgl.Cartesian3());
}
tangents[tangents.length - 1] = new bmgl.Cartesian3(1165345, 112641, 47281);
var spline = bmgl.HermiteSpline.createC1({
times : times,
points : points,
tangents : tangents
});
Throws
-
DeveloperError : 需要點(diǎn)、時(shí)間和切線。
-
DeveloperError : points.length必須大于或等于2。
-
DeveloperError : 時(shí)間、點(diǎn)和切線的長(zhǎng)度必須相同。
創(chuàng)建夾緊的三次樣條曲線。生成內(nèi)部控制點(diǎn)的切線,以在C2類(lèi)中創(chuàng)建曲線。
Parameters:
options
(Object)
Name | Description |
---|---|
options.times
Array.<Number>
|
控制點(diǎn)時(shí)間數(shù)組。 |
options.points
Array.<Cartesian3>
|
控制點(diǎn)數(shù)組。 |
options.firstTangent
Cartesian3
|
第一個(gè)控制點(diǎn)的外切線。 |
options.lastTangent
Cartesian3
|
最后一個(gè)控制點(diǎn)的傳入切線。 |
Example
// Create a clamped cubic spline above the earth from Philadelphia to Los Angeles.
var spline = bmgl.HermiteSpline.createClampedCubic({
times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
points : [
new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
],
firstTangent : new bmgl.Cartesian3(1125196, -161816, 270551),
lastTangent : new bmgl.Cartesian3(1165345, 112641, 47281)
});
Throws
-
DeveloperError : 需要點(diǎn)、時(shí)間、FirstTangent和LastTangent。
-
DeveloperError : points.length必須大于或等于2。
-
DeveloperError : times.length必須等于points.length。
創(chuàng)建自然三次樣條曲線。生成控制點(diǎn)的切線,以在C2類(lèi)中創(chuàng)建曲線。
Parameters:
options
(Object)
Name | Description |
---|---|
options.times
Array.<Number>
|
控制點(diǎn)時(shí)間數(shù)組。 |
options.points
Array.<Cartesian3>
|
控制點(diǎn)數(shù)組。 |
Example
// Create a natural cubic spline above the earth from Philadelphia to Los Angeles.
var spline = bmgl.HermiteSpline.createNaturalCubic({
times : [ 0.0, 1.5, 3.0, 4.5, 6.0 ],
points : [
new bmgl.Cartesian3(1235398.0, -4810983.0, 4146266.0),
new bmgl.Cartesian3(1372574.0, -5345182.0, 4606657.0),
new bmgl.Cartesian3(-757983.0, -5542796.0, 4514323.0),
new bmgl.Cartesian3(-2821260.0, -5248423.0, 4021290.0),
new bmgl.Cartesian3(-2539788.0, -4724797.0, 3620093.0)
]
});
Throws
-
DeveloperError : 積分和時(shí)間是必需的。
-
DeveloperError : points.length必須大于或等于2。
-
DeveloperError : times.length必須等于points.length。
將給定的時(shí)間鉗制到樣條曲線所覆蓋的周期。
Parameters:
time
(Number)
時(shí)間。
在給定時(shí)間計(jì)算曲線。
Parameters:
time
(Number)
評(píng)估曲線的時(shí)間。
Throws
-
DeveloperError : 時(shí)間必須在
[t0, tn]
范圍內(nèi),其中t0
是數(shù)組times
中的第一個(gè)元素,tn
是數(shù)組times
中的最后一個(gè)元素。
在
times
中查找索引i
,以便參數(shù)time
在間隔[times[i], times[i + 1]]
中。
Parameters:
time
(Number)
時(shí)間。
Throws
-
DeveloperError : 時(shí)間必須在
[t0, tn]
范圍內(nèi),其中t0
是數(shù)組times
中的第一個(gè)元素,tn
是數(shù)組times
中的最后一個(gè)元素。
將給定時(shí)間包裝到樣條曲線所覆蓋的周期。
Parameters:
time
(Number)
時(shí)間。