Skip to content

Commit fe60ac8

Browse files
author
Hannah
authored
Merge pull request #7654 from virtualcitySYSTEMS/fix-useClampedAsin
HeadingPitchRoll.fromQuaternion clamps pitch asin
2 parents 5cbb5e5 + 6892f16 commit fe60ac8

File tree

3 files changed

+9
-1
lines changed

3 files changed

+9
-1
lines changed

CHANGES.md

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ Change Log
1515

1616
##### Fixes :wrench:
1717
* Fixed the value for `BlendFunction.ONE_MINUS_CONSTANT_COLOR`. [#7624](https://github.com/AnalyticalGraphicsInc/cesium/pull/7624)
18+
* Fixed `HeadingPitchRoll.pitch` being `NaN` when using `.fromQuaternion` do to a rounding error
19+
for pitches close to +/- 90°. [#7654](https://github.com/AnalyticalGraphicsInc/cesium/pull/7654)
1820

1921
### 1.55 - 2019-03-01
2022

Source/Core/HeadingPitchRoll.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ define([
5050
var numeratorHeading = 2 * (quaternion.w * quaternion.z + quaternion.x * quaternion.y);
5151
result.heading = -Math.atan2(numeratorHeading, denominatorHeading);
5252
result.roll = Math.atan2(numeratorRoll, denominatorRoll);
53-
result.pitch = -Math.asin(test);
53+
result.pitch = -CesiumMath.asinClamped(test);
5454
return result;
5555
};
5656

Specs/Core/HeadingPitchRollSpec.js

+6
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ defineSuite([
5151
}
5252
});
5353

54+
it('it should return the correct pitch, even with a quaternion rounding error', function() {
55+
var q = new Quaternion(8.801218199179452e-17, -0.7071067801637715, -8.801218315071006e-17, -0.7071067822093238);
56+
var result = HeadingPitchRoll.fromQuaternion(q);
57+
expect(result.pitch).toEqual(-(Math.PI / 2));
58+
});
59+
5460
it('conversion from degrees', function() {
5561
var testingTab = [
5662
[0, 0, 0],

0 commit comments

Comments
 (0)