You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
8.7 KiB
JavaScript
302 lines
8.7 KiB
JavaScript
import { HeadingPitchRoll } from "../../Source/Cesium.js";
|
|
import { Math as CesiumMath } from "../../Source/Cesium.js";
|
|
import { Quaternion } from "../../Source/Cesium.js";
|
|
|
|
describe("Core/HeadingPitchRoll", function () {
|
|
var deg2rad = CesiumMath.RADIANS_PER_DEGREE;
|
|
|
|
it("construct with default values", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll();
|
|
expect(headingPitchRoll.heading).toEqual(0.0);
|
|
expect(headingPitchRoll.pitch).toEqual(0.0);
|
|
expect(headingPitchRoll.roll).toEqual(0.0);
|
|
});
|
|
|
|
it("construct with all values", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll(
|
|
1.0 * deg2rad,
|
|
2.0 * deg2rad,
|
|
3.0 * deg2rad
|
|
);
|
|
expect(headingPitchRoll.heading).toEqual(
|
|
1.0 * deg2rad,
|
|
2.0 * deg2rad,
|
|
3.0 * deg2rad
|
|
);
|
|
expect(headingPitchRoll.pitch).toEqual(
|
|
2.0 * deg2rad,
|
|
2.0 * deg2rad,
|
|
3.0 * deg2rad
|
|
);
|
|
expect(headingPitchRoll.roll).toEqual(
|
|
3.0 * deg2rad,
|
|
2.0 * deg2rad,
|
|
3.0 * deg2rad
|
|
);
|
|
});
|
|
|
|
it("conversion from quaternion", function () {
|
|
var testingTab = [
|
|
[0, 0, 0],
|
|
[90 * deg2rad, 0, 0],
|
|
[-90 * deg2rad, 0, 0],
|
|
[0, 89 * deg2rad, 0],
|
|
[0, -89 * deg2rad, 0],
|
|
[0, 0, 90 * deg2rad],
|
|
[0, 0, -90 * deg2rad],
|
|
[30 * deg2rad, 30 * deg2rad, 30 * deg2rad],
|
|
[-30 * deg2rad, -30 * deg2rad, 45 * deg2rad],
|
|
];
|
|
var hpr = new HeadingPitchRoll();
|
|
for (var i = 0; i < testingTab.length; i++) {
|
|
var init = testingTab[i];
|
|
hpr.heading = init[0];
|
|
hpr.pitch = init[1];
|
|
hpr.roll = init[2];
|
|
|
|
var result = HeadingPitchRoll.fromQuaternion(
|
|
Quaternion.fromHeadingPitchRoll(hpr)
|
|
);
|
|
expect(init[0]).toEqualEpsilon(result.heading, CesiumMath.EPSILON11);
|
|
expect(init[1]).toEqualEpsilon(result.pitch, CesiumMath.EPSILON11);
|
|
expect(init[2]).toEqualEpsilon(result.roll, CesiumMath.EPSILON11);
|
|
}
|
|
});
|
|
|
|
it("it should return the correct pitch, even with a quaternion rounding error", function () {
|
|
var q = new Quaternion(
|
|
8.801218199179452e-17,
|
|
-0.7071067801637715,
|
|
-8.801218315071006e-17,
|
|
-0.7071067822093238
|
|
);
|
|
var result = HeadingPitchRoll.fromQuaternion(q);
|
|
expect(result.pitch).toEqual(-(Math.PI / 2));
|
|
});
|
|
|
|
it("conversion from degrees", function () {
|
|
var testingTab = [
|
|
[0, 0, 0],
|
|
[90, 0, 0],
|
|
[-90, 0, 0],
|
|
[0, 89, 0],
|
|
[0, -89, 0],
|
|
[0, 0, 90],
|
|
[0, 0, -90],
|
|
[30, 30, 30],
|
|
[-30, -30, 45],
|
|
];
|
|
for (var i = 0; i < testingTab.length; i++) {
|
|
var init = testingTab[i];
|
|
var result = HeadingPitchRoll.fromDegrees(init[0], init[1], init[2]);
|
|
expect(init[0] * deg2rad).toEqualEpsilon(
|
|
result.heading,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
expect(init[1] * deg2rad).toEqualEpsilon(
|
|
result.pitch,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
expect(init[2] * deg2rad).toEqualEpsilon(
|
|
result.roll,
|
|
CesiumMath.EPSILON11
|
|
);
|
|
}
|
|
});
|
|
|
|
it("fromDegrees with result", function () {
|
|
var headingDeg = -115;
|
|
var pitchDeg = 37;
|
|
var rollDeg = 40;
|
|
var headingRad = headingDeg * deg2rad;
|
|
var pitchRad = pitchDeg * deg2rad;
|
|
var rollRad = rollDeg * deg2rad;
|
|
var result = new HeadingPitchRoll();
|
|
var actual = HeadingPitchRoll.fromDegrees(
|
|
headingDeg,
|
|
pitchDeg,
|
|
rollDeg,
|
|
result
|
|
);
|
|
var expected = new HeadingPitchRoll(headingRad, pitchRad, rollRad);
|
|
expect(actual).toEqual(expected);
|
|
expect(actual).toBe(result);
|
|
});
|
|
|
|
it("clone with a result parameter", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll(
|
|
1.0 * deg2rad,
|
|
2.0 * deg2rad,
|
|
3.0 * deg2rad
|
|
);
|
|
var result = new HeadingPitchRoll();
|
|
var returnedResult = HeadingPitchRoll.clone(headingPitchRoll, result);
|
|
expect(headingPitchRoll).not.toBe(result);
|
|
expect(result).toBe(returnedResult);
|
|
expect(headingPitchRoll).toEqual(result);
|
|
});
|
|
|
|
it("clone works with a result parameter that is an input parameter", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll(
|
|
1.0 * deg2rad,
|
|
2.0 * deg2rad,
|
|
3.0 * deg2rad
|
|
);
|
|
var returnedResult = HeadingPitchRoll.clone(
|
|
headingPitchRoll,
|
|
headingPitchRoll
|
|
);
|
|
expect(headingPitchRoll).toBe(returnedResult);
|
|
});
|
|
|
|
it("equals", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll(1.0, 2.0, 3.0);
|
|
expect(
|
|
HeadingPitchRoll.equals(
|
|
headingPitchRoll,
|
|
new HeadingPitchRoll(1.0, 2.0, 3.0)
|
|
)
|
|
).toEqual(true);
|
|
expect(
|
|
HeadingPitchRoll.equals(
|
|
headingPitchRoll,
|
|
new HeadingPitchRoll(2.0, 2.0, 3.0)
|
|
)
|
|
).toEqual(false);
|
|
expect(
|
|
HeadingPitchRoll.equals(
|
|
headingPitchRoll,
|
|
new HeadingPitchRoll(2.0, 1.0, 3.0)
|
|
)
|
|
).toEqual(false);
|
|
expect(
|
|
HeadingPitchRoll.equals(
|
|
headingPitchRoll,
|
|
new HeadingPitchRoll(1.0, 2.0, 4.0)
|
|
)
|
|
).toEqual(false);
|
|
expect(HeadingPitchRoll.equals(headingPitchRoll, undefined)).toEqual(false);
|
|
});
|
|
|
|
it("equalsEpsilon", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll(1.0, 2.0, 3.0);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(new HeadingPitchRoll(1.0, 2.0, 3.0), 0.0)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(new HeadingPitchRoll(1.0, 2.0, 3.0), 1.0)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(new HeadingPitchRoll(2.0, 2.0, 3.0), 1.0)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(new HeadingPitchRoll(1.0, 3.0, 3.0), 1.0)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(new HeadingPitchRoll(1.0, 2.0, 4.0), 1.0)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(2.0, 2.0, 3.0),
|
|
CesiumMath.EPSILON6
|
|
)
|
|
).toEqual(false);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(1.0, 3.0, 3.0),
|
|
CesiumMath.EPSILON6
|
|
)
|
|
).toEqual(false);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(1.0, 2.0, 4.0),
|
|
CesiumMath.EPSILON6
|
|
)
|
|
).toEqual(false);
|
|
expect(headingPitchRoll.equalsEpsilon(undefined, 1)).toEqual(false);
|
|
|
|
headingPitchRoll = new HeadingPitchRoll(3000000.0, 4000000.0, 5000000.0);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(3000000.0, 4000000.0, 5000000.0),
|
|
0.0
|
|
)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(3000000.2, 4000000.0, 5000000.0),
|
|
CesiumMath.EPSILON7
|
|
)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(3000000.0, 4000000.2, 5000000.0),
|
|
CesiumMath.EPSILON7
|
|
)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(3000000.0, 4000000.0, 5000000.2),
|
|
CesiumMath.EPSILON7
|
|
)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(3000000.2, 4000000.2, 5000000.2),
|
|
CesiumMath.EPSILON7
|
|
)
|
|
).toEqual(true);
|
|
expect(
|
|
headingPitchRoll.equalsEpsilon(
|
|
new HeadingPitchRoll(3000000.2, 4000000.2, 5000000.2),
|
|
CesiumMath.EPSILON9
|
|
)
|
|
).toEqual(false);
|
|
expect(headingPitchRoll.equalsEpsilon(undefined, 1)).toEqual(false);
|
|
|
|
expect(
|
|
HeadingPitchRoll.equalsEpsilon(undefined, headingPitchRoll, 1)
|
|
).toEqual(false);
|
|
});
|
|
|
|
it("toString", function () {
|
|
var headingPitchRoll = new HeadingPitchRoll(1.123, 2.345, 6.789);
|
|
expect(headingPitchRoll.toString()).toEqual("(1.123, 2.345, 6.789)");
|
|
});
|
|
|
|
it("fromQuaternion throws with no parameter", function () {
|
|
expect(function () {
|
|
HeadingPitchRoll.fromQuaternion();
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
var scratchHeadingPitchRoll = new HeadingPitchRoll();
|
|
|
|
it("fromDegrees throws with no heading parameter", function () {
|
|
expect(function () {
|
|
HeadingPitchRoll.fromDegrees(undefined, 0, 0, scratchHeadingPitchRoll);
|
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
|
HeadingPitchRoll.fromDegrees(undefined, 0, 0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("fromDegrees throws with no pitch parameter", function () {
|
|
expect(function () {
|
|
HeadingPitchRoll.fromDegrees(0, undefined, 0, scratchHeadingPitchRoll);
|
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
|
HeadingPitchRoll.fromDegrees(0, undefined, 0);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
|
|
it("fromDegrees throws with no roll parameter", function () {
|
|
expect(function () {
|
|
HeadingPitchRoll.fromDegrees(0, 0, undefined, scratchHeadingPitchRoll);
|
|
}).toThrowDeveloperError();
|
|
expect(function () {
|
|
HeadingPitchRoll.fromDegrees(0, 0, undefined);
|
|
}).toThrowDeveloperError();
|
|
});
|
|
});
|