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.
140 lines
3.7 KiB
JavaScript
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();
|
|
});
|
|
});
|