Files
config-pacs-docker/nv/html/dwv/tests/math/shapes.test.js
2025-02-26 14:49:25 +07:00

207 lines
7.4 KiB
JavaScript

/**
* Tests for the 'math/shapes.js' file.
*/
// Do not warn if these variables were not defined before.
/* global QUnit */
QUnit.module("shapes");
/**
* Tests for {@link dwv.math.Circle}.
* @function module:tests/math~Circle
*/
QUnit.test("Test Circle.", function (assert) {
var center = new dwv.math.Point2D(0,0);
var c0 = new dwv.math.Circle(center,2);
// getCenter
assert.equal(c0.getCenter(), center, "getCenter");
// getRadius
assert.equal(c0.getRadius(), 2, "getRadius");
// getSurface
assert.equal(c0.getSurface(), Math.PI*2*2, "getSurface");
// equals: true
assert.equal(c0.getWorldSurface(0.5,0.5), Math.PI, "getWorldSurface");
});
/**
* Tests for {@link dwv.math.Ellipse}.
* @function module:tests/math~Ellipse
*/
QUnit.test("Test Ellipse.", function (assert) {
var center = new dwv.math.Point2D(0,0);
var e0 = new dwv.math.Ellipse(center,2,4);
// getCenter
assert.equal(e0.getCenter(), center, "getCenter");
// getA
assert.equal(e0.getA(), 2, "getA");
// getB
assert.equal(e0.getB(), 4, "getB");
// getSurface
assert.equal(e0.getSurface(), Math.PI*2*4, "getSurface");
// equals: true
assert.equal(e0.getWorldSurface(0.5,0.25), Math.PI, "getWorldSurface");
});
/**
* Tests for {@link dwv.math.Line}.
* @function module:tests/math~Line
*/
QUnit.test("Test Line.", function (assert) {
var p0 = new dwv.math.Point2D(0,0);
var p1 = new dwv.math.Point2D(0,-5);
var l0 = new dwv.math.Line(p0,p1);
// getBegin
assert.equal(l0.getBegin(), p0, "getBegin");
// getEnd
assert.equal(l0.getEnd(), p1, "getEnd");
// getLength
assert.equal(l0.getLength(), 5, "getLength");
// getWorldLength
assert.equal(l0.getWorldLength(0.5,0.5), 2.5, "getWorldLength");
// getMidpoint
var pMid = new dwv.math.Point2D(0,-2); // rounded...
assert.equal(l0.getMidpoint().equals(pMid), true, "getMidpoint");
// slope
var p20 = new dwv.math.Point2D(1,1);
var l10 = new dwv.math.Line(p0,p20);
assert.equal(l10.getSlope(), 1, "getSlope");
var p21 = new dwv.math.Point2D(1,-1);
var l11 = new dwv.math.Line(p0,p21);
assert.equal(l11.getSlope(), -1, "getSlope (negative)");
var p3 = new dwv.math.Point2D(1,0);
var l2 = new dwv.math.Line(p0,p3);
assert.equal(l2.getSlope(), 0, "getSlope (horizontal)");
assert.equal(l0.getSlope(), -Infinity, "getSlope (vertical)");
// inclination
assert.equal(l10.getInclination(), 135, "Inclination"); // 180 - 45
assert.equal(l11.getInclination(), 225, "Inclination (negative)"); // 180 + 45
assert.equal(l2.getInclination(), 180, "Inclination (horizontal)");
assert.equal(l0.getInclination(), 270, "Inclination (vertical)"); // 180 + 90
// angle
assert.equal(dwv.math.getAngle(l10, l11), 90, "getAngle");
var p4 = new dwv.math.Point2D(0,-1);
var p5 = new dwv.math.Point2D(1,-1);
var l3 = new dwv.math.Line(p4,p5);
assert.equal(dwv.math.getAngle(l2, l3), 180, "getAngle (horizontal parallel)");
var l4 = new dwv.math.Line(p3,p21);
assert.equal(dwv.math.getAngle(l0, l4), 180, "getAngle (vertical parallel)");
// intercept
assert.equal(l10.getIntercept(), 0, "getIntercept (zero)");
var p6 = new dwv.math.Point2D(0,1);
var p7 = new dwv.math.Point2D(1,2);
var l5 = new dwv.math.Line(p6,p7);
assert.equal(l5.getIntercept(), 1, "getIntercept");
var p8 = new dwv.math.Point2D(0,-1);
var p9 = new dwv.math.Point2D(1,-2);
var l6 = new dwv.math.Line(p8,p9);
assert.equal(l6.getIntercept(), -1, "getIntercept (negative)");
var p10 = new dwv.math.Point2D(0,1);
var p11 = new dwv.math.Point2D(-1,2);
var l7 = new dwv.math.Line(p10,p11);
assert.equal(l7.getIntercept(), 1, "getIntercept (back)");
var p12 = new dwv.math.Point2D(0,-1);
var p13 = new dwv.math.Point2D(-1,-2);
var l8 = new dwv.math.Line(p12,p13);
assert.equal(l8.getIntercept(), -1, "getIntercept (back negative)");
// perpendicular
var l0p = dwv.math.getPerpendicularLine(l0, p0, 2);
var pl0pbeg = new dwv.math.Point2D(-1,0);
assert.ok(l0p.getBegin().equals( pl0pbeg ), "perpendicular horizon begin");
var pl0pend = new dwv.math.Point2D(1,0);
assert.ok(l0p.getEnd().equals( pl0pend ), "perpendicular horizon end");
var l2p = dwv.math.getPerpendicularLine(l2, p0, 2);
var pl2pbeg = new dwv.math.Point2D(0,-1);
assert.ok(l2p.getBegin().equals( pl2pbeg ), "perpendicular vertical begin");
var pl2pend = new dwv.math.Point2D(0,1);
assert.ok(l2p.getEnd().equals( pl2pend ), "perpendicular vertical end");
var isSimilar = function (a, b) {
return Math.abs(a-b) < 1e-10;
};
var isSimilarPoint2D = function (p0, p1) {
return isSimilar(p0.getX(), p1.getX()) &&
isSimilar(p0.getY(), p1.getY());
};
var l5p = dwv.math.getPerpendicularLine(l5, p6, 2);
var halfSqrt2 = Math.sqrt(2) / 2;
var pl5pbeg = new dwv.math.Point2D(-halfSqrt2,1 + halfSqrt2);
assert.ok(isSimilarPoint2D(l5p.getBegin(), pl5pbeg ), "perpendicular begin");
var pl5pend = new dwv.math.Point2D(halfSqrt2,1 - halfSqrt2);
assert.ok(isSimilarPoint2D(l5p.getEnd(), pl5pend ), "perpendicular end");
});
/**
* Tests for {@link dwv.math.Rectangle}.
* @function module:tests/math~Rectangle
*/
QUnit.test("Test Rectangle.", function (assert) {
var p0 = new dwv.math.Point2D(0,0);
var p1 = new dwv.math.Point2D(-4,-4);
var r0 = new dwv.math.Rectangle(p0,p1);
// getBegin
assert.equal(r0.getBegin().equals(p1), true, 'getBegin');
// getEnd
assert.equal(r0.getEnd().equals(p0), true, "getEnd");
// getRealWidth
assert.equal(r0.getRealWidth(), 4, "getRealWidth");
// getRealHeight
assert.equal(r0.getRealHeight(), 4, "getRealHeight");
// getWidth
assert.equal(r0.getWidth(), 4, "getWidth");
// getHeight
assert.equal(r0.getHeight(), 4, "getHeight");
// getSurface
assert.equal(r0.getSurface(), 16, "getSurface");
// getWorldSurface
assert.equal(r0.getWorldSurface(0.5,0.5), 4, "getWorldSurface");
});
/**
* Tests for {@link dwv.math.ROI}.
* @function module:tests/math~ROI
*/
QUnit.test("Test ROI.", function (assert) {
var r0 = new dwv.math.ROI();
// getLength
assert.equal(r0.getLength(), 0, "getLength");
// add a point
var p0 = new dwv.math.Point2D(0,0);
r0.addPoint(p0);
// getLength
assert.equal(r0.getLength(), 1, "getLength");
// add another point
var p1 = new dwv.math.Point2D(-4,-4);
r0.addPoint(p1);
// getPoint first
assert.equal(r0.getPoint(0), p0, "getPoint first");
// getPoint second
assert.equal(r0.getPoint(1), p1, "getPoint second");
});
/**
* Tests for {@link dwv.math.Path}.
* @function module:tests/math~Path
*/
QUnit.test("Test Path.", function (assert) {
var path0 = new dwv.math.Path();
// getLength
assert.equal(path0.getLength(), 0, "getLength");
// add a point
var p0 = new dwv.math.Point2D(0,0);
path0.addPoint(p0);
// getLength
assert.equal(path0.getLength(), 1, "getLength");
// add another point
var p1 = new dwv.math.Point2D(-4,-4);
path0.addPoint(p1);
// getPoint first
assert.equal(path0.getPoint(0), p0, "getPoint first");
// getPoint second
assert.equal(path0.getPoint(1), p1, "getPoint second");
// add first point a control point
path0.addControlPoint(p0);
// check if control point
assert.equal(path0.isControlPoint(p0), 1, "isControlPoint");
});