Skip to content

Commit

Permalink
remove random to get a reproducible geometry (#3)
Browse files Browse the repository at this point in the history
  • Loading branch information
Fil committed Feb 24, 2018
1 parent f8de8f4 commit 9513bb8
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "d3-geo-polygon",
"version": "1.1.0",
"version": "1.1.1",
"description": "Clipping and geometric operations for spherical polygons.",
"keywords": [
"d3",
Expand Down
14 changes: 9 additions & 5 deletions src/clip/polygon.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import clip from "./index";
import {atan2, cos, degrees, pi, radians, sign, sin, sqrt} from "../math";
import {atan2, cos, degrees, max, min, pi, radians, sign, sin, sqrt} from "../math";
import {cartesian, cartesianCross, cartesianDot, cartesianEqual, spherical} from "../cartesian";
import {intersectCoincident, intersectPointOnLine, intersectSegment, intersect} from "../intersect";
import {default as polygonContains} from "../polygonContains";
Expand Down Expand Up @@ -29,6 +29,10 @@ export default function (p) {
return polygonContains(polygon, [lambda, phi]);
}

function randsign(i,j) {
return sign(sin(100 * i + j));
}

function clipLine(stream) {
var point0,
lambda00,
Expand Down Expand Up @@ -59,8 +63,8 @@ export default function (p) {
cartesianEqual(intersection, point0) || cartesianEqual(intersection, point) ||
cartesianEqual(intersection, s.from) || cartesianEqual(intersection, s.to)) {
t = 1e-4;
lambda = (lambda + 3 * pi + (Math.random() < .5 ? t : -t)) % (2 * pi) - pi;
phi = Math.min(pi / 2 - 1e-4, Math.max(1e-4 - pi / 2, phi + (Math.random() < .5 ? t : -t)));
lambda = (lambda + 3 * pi + randsign(i,j) * t) % (2 * pi) - pi;
phi = min(pi / 2 - 1e-4, max(1e-4 - pi / 2, phi + randsign(i,j) * t));
segment = new intersectSegment(point0, point = cartesian([lambda, phi]));
i = -1, --j;
intersections.length = 0;
Expand Down Expand Up @@ -95,8 +99,8 @@ export default function (p) {
s = segments[i];
if (intersectPointOnLine(point, s)) {
t = 1e-4;
lambda = (lambda + 3 * pi + (Math.random() < .5 ? t : -t)) % (2 * pi) - pi;
phi = Math.min(pi / 2 - 1e-4, Math.max(1e-4 - pi / 2, phi + (Math.random() < .5 ? t : -t)));
lambda = (lambda + 3 * pi + randsign(i,j) * t) % (2 * pi) - pi;
phi = min(pi / 2 - 1e-4, max(1e-4 - pi / 2, phi + randsign(i,j) * t));
point = cartesian([lambda, phi]);
i = -1, --j;
}
Expand Down
2 changes: 2 additions & 0 deletions src/math.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ export var ceil = Math.ceil;
export var exp = Math.exp;
export var floor = Math.floor;
export var log = Math.log;
export var max = Math.max;
export var min = Math.min;
export var pow = Math.pow;
export var sin = Math.sin;
export var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
Expand Down

0 comments on commit 9513bb8

Please sign in to comment.