DSDSWeb/static/js/Cesium-1.53/Specs/Core/EllipsoidTangentPlaneSpec.js

287 lines
13 KiB
JavaScript
Raw Normal View History

2024-07-11 18:02:47 +08:00
defineSuite([
'Core/EllipsoidTangentPlane',
'Core/Cartesian2',
'Core/Cartesian3',
'Core/Ellipsoid'
], function(
EllipsoidTangentPlane,
Cartesian2,
Cartesian3,
Ellipsoid) {
'use strict';
it('constructor defaults to WGS84', function() {
var origin = new Cartesian3(Ellipsoid.WGS84.radii.x, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin);
expect(tangentPlane.ellipsoid).toBe(Ellipsoid.WGS84);
expect(tangentPlane.origin).toEqual(origin);
});
it('constructor sets expected values', function() {
var tangentPlane = new EllipsoidTangentPlane(Cartesian3.UNIT_X, Ellipsoid.UNIT_SPHERE);
expect(tangentPlane.ellipsoid).toBe(Ellipsoid.UNIT_SPHERE);
expect(tangentPlane.origin).toEqual(Cartesian3.UNIT_X);
});
it('fromPoints sets expected values', function() {
var points = [new Cartesian3(2.0, 0.0, 0.0), new Cartesian3(0.0, 0.0, 0.0)];
var tangentPlane = EllipsoidTangentPlane.fromPoints(points, Ellipsoid.UNIT_SPHERE);
expect(tangentPlane.ellipsoid).toBe(Ellipsoid.UNIT_SPHERE);
expect(tangentPlane.origin).toEqual(Cartesian3.UNIT_X);
});
it('projectPointOntoPlane returns undefined for unsolvable projections', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = new Cartesian3(0.0, 0.0, 1.0);
var returnedResult = tangentPlane.projectPointOntoPlane(positions);
expect(returnedResult).toBeUndefined();
});
it('projectPointOntoPlane works without a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = new Cartesian3(1.0, 0.0, 1.0);
var expectedResult = new Cartesian2(0.0, 1.0);
var returnedResult = tangentPlane.projectPointOntoPlane(positions);
expect(returnedResult).toEqual(expectedResult);
});
it('projectPointOntoPlane works with a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = new Cartesian3(1.0, 0.0, 1.0);
var expectedResult = new Cartesian2(0.0, 1.0);
var result = new Cartesian2();
var returnedResult = tangentPlane.projectPointOntoPlane(positions, result);
expect(result).toBe(returnedResult);
expect(returnedResult).toEqual(expectedResult);
});
it('projectPointsOntoPlane works without a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(1.0, 0.0, 1.0), new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(1.0, 1.0, 0.0)];
var expectedResults = [new Cartesian2(0.0, 1.0), new Cartesian2(0.0, 0.0), new Cartesian2(1.0, 0.0)];
var returnedResults = tangentPlane.projectPointsOntoPlane(positions);
expect(returnedResults).toEqual(expectedResults);
});
it('projectPointsOntoPlane works with a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(1.0, 0.0, 1.0), new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(1.0, 1.0, 0.0)];
var expectedResults = [new Cartesian2(0.0, 1.0), new Cartesian2(0.0, 0.0), new Cartesian2(1.0, 0.0)];
var index0 = new Cartesian2();
var result = [index0];
var returnedResults = tangentPlane.projectPointsOntoPlane(positions, result);
expect(result).toBe(returnedResults);
expect(result[0]).toBe(index0);
expect(returnedResults).toEqual(expectedResults);
});
it('projectPointsOntoPlane works when some points cannot be projected', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(1.0, 0.0, 1.0), new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(0.0, 0.0, 1.0), new Cartesian3(1.0, 1.0, 0.0), new Cartesian3(0.0, 1.0, 0.0)];
var expectedResults = [new Cartesian2(0.0, 1.0), new Cartesian2(0.0, 0.0), new Cartesian2(1.0, 0.0)];
var returnedResults = tangentPlane.projectPointsOntoPlane(positions);
expect(returnedResults).toEqual(expectedResults);
});
it('projectPointOntoEllipsoid works without a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var position = new Cartesian3(2.0, 2.0, 0.0);
var expectedResult = new Cartesian3(1.0/3.0, 2.0/3.0, 2.0/3.0);
var returnedResult = tangentPlane.projectPointOntoEllipsoid(position);
expect(returnedResult).toEqual(expectedResult);
});
it('projectPointOntoEllipsoid works with a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var position = new Cartesian3(2.0, -2.0, 0.0);
var expectedResult = new Cartesian3(1.0/3.0, 2.0/3.0, -2.0/3.0);
var result = new Cartesian3();
var returnedResult = tangentPlane.projectPointOntoEllipsoid(position, result);
expect(result).toBe(returnedResult);
expect(returnedResult).toEqual(expectedResult);
});
it('projectPointsOntoEllipsoid works without a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(2.0, -2.0, 0.0), new Cartesian3(2.0, 2.0, 0.0)];
var expectedResults = [new Cartesian3(1.0/3.0, 2.0/3.0, -2.0/3.0), new Cartesian3(1.0/3.0, 2.0/3.0, 2.0/3.0)];
var returnedResults = tangentPlane.projectPointsOntoEllipsoid(positions);
expect(returnedResults).toEqual(expectedResults);
});
it('projectPointsOntoEllipsoid works with a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(2.0, -2.0, 0.0), new Cartesian3(2.0, 2.0, 0.0)];
var expectedResults = [new Cartesian3(1.0/3.0, 2.0/3.0, -2.0/3.0), new Cartesian3(1.0/3.0, 2.0/3.0, 2.0/3.0)];
var index0 = new Cartesian3();
var result = [index0];
var returnedResults = tangentPlane.projectPointsOntoEllipsoid(positions, result);
expect(result).toBe(returnedResults);
expect(result[0]).toBe(index0);
expect(returnedResults).toEqual(expectedResults);
});
it('projectPointToNearestOnPlane works without a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = new Cartesian3(1.0, 0.0, 1.0);
var expectedResult = new Cartesian2(0.0, 1.0);
var returnedResult = tangentPlane.projectPointToNearestOnPlane(positions);
expect(returnedResult).toEqual(expectedResult);
});
it('projectPointToNearestOnPlane works projecting from various distances', function () {
var ellipsoid = Ellipsoid.ZERO;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
expect(tangentPlane.projectPointToNearestOnPlane(new Cartesian3(2.0, 0.0, 0.0))).toEqual(new Cartesian2(0.0, 0.0));
expect(tangentPlane.projectPointToNearestOnPlane(new Cartesian3(1.0, 0.0, 0.0))).toEqual(new Cartesian2(0.0, 0.0));
expect(tangentPlane.projectPointToNearestOnPlane(new Cartesian3(0.0, 0.0, 0.0))).toEqual(new Cartesian2(0.0, 0.0));
expect(tangentPlane.projectPointToNearestOnPlane(new Cartesian3(-1.0, 0.0, 0.0))).toEqual(new Cartesian2(0.0, 0.0));
});
it('projectPointToNearestOnPlane works with a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = new Cartesian3(1.0, 0.0, 1.0);
var expectedResult = new Cartesian2(0.0, 1.0);
var result = new Cartesian2();
var returnedResult = tangentPlane.projectPointToNearestOnPlane(positions, result);
expect(result).toBe(returnedResult);
expect(returnedResult).toEqual(expectedResult);
});
it('projectPointsToNearestOnPlane works without a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(1.0, 0.0, 1.0), new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(1.0, 1.0, 0.0)];
var expectedResults = [new Cartesian2(0.0, 1.0), new Cartesian2(0.0, 0.0), new Cartesian2(1.0, 0.0)];
var returnedResults = tangentPlane.projectPointsToNearestOnPlane(positions);
expect(returnedResults).toEqual(expectedResults);
});
it('projectPointsToNearestOnPlane works with a result parameter', function () {
var ellipsoid = Ellipsoid.UNIT_SPHERE;
var origin = new Cartesian3(1.0, 0.0, 0.0);
var tangentPlane = new EllipsoidTangentPlane(origin, ellipsoid);
var positions = [new Cartesian3(1.0, 0.0, 1.0), new Cartesian3(1.0, 0.0, 0.0), new Cartesian3(1.0, 1.0, 0.0)];
var expectedResults = [new Cartesian2(0.0, 1.0), new Cartesian2(0.0, 0.0), new Cartesian2(1.0, 0.0)];
var index0 = new Cartesian2();
var result = [index0];
var returnedResults = tangentPlane.projectPointsToNearestOnPlane(positions, result);
expect(result).toBe(returnedResults);
expect(result[0]).toBe(index0);
expect(returnedResults).toEqual(expectedResults);
});
it('constructor throws without origin', function() {
expect(function() {
return new EllipsoidTangentPlane(undefined, Ellipsoid.WGS84);
}).toThrowDeveloperError();
});
it('constructor throws if origin is at the center of the ellipsoid', function() {
expect(function() {
return new EllipsoidTangentPlane(Cartesian3.ZERO, Ellipsoid.WGS84);
}).toThrowDeveloperError();
});
it('fromPoints throws without cartesians', function() {
expect(function() {
return EllipsoidTangentPlane.fromPoints(undefined, Ellipsoid.WGS84);
}).toThrowDeveloperError();
});
it('projectPointOntoPlane throws without cartesian', function() {
var tangentPlane = new EllipsoidTangentPlane(Cartesian3.UNIT_X, Ellipsoid.UNIT_SPHERE);
expect(function() {
return tangentPlane.projectPointOntoPlane(undefined);
}).toThrowDeveloperError();
});
it('projectPointsOntoPlane throws without cartesians', function() {
var tangentPlane = new EllipsoidTangentPlane(Cartesian3.UNIT_X, Ellipsoid.UNIT_SPHERE);
expect(function() {
return tangentPlane.projectPointsOntoPlane(undefined);
}).toThrowDeveloperError();
});
it('projectPointToNearestOnPlane throws without cartesian', function() {
var tangentPlane = new EllipsoidTangentPlane(Cartesian3.UNIT_X, Ellipsoid.UNIT_SPHERE);
expect(function() {
return tangentPlane.projectPointToNearestOnPlane(undefined);
}).toThrowDeveloperError();
});
it('projectPointsToNearestOnPlane throws without cartesians', function() {
var tangentPlane = new EllipsoidTangentPlane(Cartesian3.UNIT_X, Ellipsoid.UNIT_SPHERE);
expect(function() {
return tangentPlane.projectPointsToNearestOnPlane(undefined);
}).toThrowDeveloperError();
});
it('projectPointsOntoEllipsoid throws without cartesians', function() {
var tangentPlane = new EllipsoidTangentPlane(Cartesian3.UNIT_X, Ellipsoid.UNIT_SPHERE);
expect(function() {
return tangentPlane.projectPointsOntoEllipsoid(undefined);
}).toThrowDeveloperError();
});
it('projectPointsOntoEllipsoid works with an arbitrary ellipsoid using fromPoints', function () {
var points = Cartesian3.fromDegreesArray([
-72.0, 40.0,
-68.0, 35.0,
-75.0, 30.0,
-70.0, 30.0,
-68.0, 40.0
]);
var tangentPlane = EllipsoidTangentPlane.fromPoints(points, Ellipsoid.WGS84);
var points2D = tangentPlane.projectPointsOntoPlane(points);
var positionsBack = tangentPlane.projectPointsOntoEllipsoid(points2D);
expect(positionsBack[0].x).toBeCloseTo(points[0].x);
expect(positionsBack[0].y).toBeCloseTo(points[0].y);
expect(positionsBack[0].z).toBeCloseTo(points[0].z);
});
});