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.
Cesium-Prequel/Specs/Core/barycentricCoordinatesSpec.js

140 lines
3.7 KiB
JavaScript

import { barycentricCoordinates } from "../../Source/Cesium.js";
import { Cartesian3 } from "../../Source/Cesium.js";
import { Math as CesiumMath } from "../../Source/Cesium.js";
describe("Core/barycentricCoordinates", function () {
var p0 = new Cartesian3(-1.0, 0.0, 0.0);
var p1 = new Cartesian3(1.0, 0.0, 0.0);
var p2 = new Cartesian3(0.0, 1.0, 1.0);
it("evaluates to p0", function () {
var point = Cartesian3.clone(p0);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqual(
Cartesian3.UNIT_X
);
});
it("evaluates to p1", function () {
var point = Cartesian3.clone(p1);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqual(
Cartesian3.UNIT_Y
);
});
it("evaluates to p2", function () {
var point = Cartesian3.clone(p2);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqual(
Cartesian3.UNIT_Z
);
});
it("evaluates on the p0-p1 edge", function () {
var point = Cartesian3.multiplyByScalar(
Cartesian3.add(p1, p0, new Cartesian3()),
0.5,
new Cartesian3()
);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqual(
new Cartesian3(0.5, 0.5, 0.0)
);
});
it("evaluates on the p0-p2 edge", function () {
var point = Cartesian3.multiplyByScalar(
Cartesian3.add(p2, p0, new Cartesian3()),
0.5,
new Cartesian3()
);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqual(
new Cartesian3(0.5, 0.0, 0.5)
);
});
it("evaluates on the p1-p2 edge", function () {
var point = Cartesian3.multiplyByScalar(
Cartesian3.add(p2, p1, new Cartesian3()),
0.5,
new Cartesian3()
);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqual(
new Cartesian3(0.0, 0.5, 0.5)
);
});
it("evaluates on the interior", function () {
var scalar = 1.0 / 3.0;
var point = Cartesian3.multiplyByScalar(
Cartesian3.add(
Cartesian3.add(p0, p1, new Cartesian3()),
p2,
new Cartesian3()
),
scalar,
new Cartesian3()
);
expect(barycentricCoordinates(point, p0, p1, p2)).toEqualEpsilon(
new Cartesian3(scalar, scalar, scalar),
CesiumMath.EPSILON14
);
});
it("evaluates without throwing a NaN", function () {
var point = Cartesian3.multiplyByScalar(
Cartesian3.add(p1, p1, p1),
0.5,
new Cartesian3()
);
var coord = barycentricCoordinates(point, p0, p1, p2);
expect(coord.z).not.toBeNaN();
});
it("evaluates with equal length sides", function () {
var p0 = new Cartesian3(
9635312487071484,
13827945400273020,
-16479219993905144
);
var p1 = new Cartesian3(
12832234.180639317,
-10455085.701705107,
750010.7274386138
);
var p2 = new Cartesian3(
-9689011.10628853,
-13420063.892507521,
750010.7274386119
);
expect(barycentricCoordinates(p0, p0, p1, p2)).toEqual(Cartesian3.UNIT_X);
expect(barycentricCoordinates(p1, p0, p1, p2)).toEqual(Cartesian3.UNIT_Y);
expect(barycentricCoordinates(p2, p0, p1, p2)).toEqual(Cartesian3.UNIT_Z);
});
it("throws without point", function () {
expect(function () {
barycentricCoordinates();
}).toThrowDeveloperError();
});
it("throws without p0", function () {
expect(function () {
barycentricCoordinates(new Cartesian3());
}).toThrowDeveloperError();
});
it("throws without p1", function () {
expect(function () {
barycentricCoordinates(new Cartesian3(), new Cartesian3());
}).toThrowDeveloperError();
});
it("throws without p2", function () {
expect(function () {
barycentricCoordinates(
new Cartesian3(),
new Cartesian3(),
new Cartesian3()
);
}).toThrowDeveloperError();
});
});