Stop dividing by zero
This commit is contained in:
parent
9a06d92ed7
commit
bd2307f782
5 changed files with 20 additions and 10 deletions
|
|
@ -41,7 +41,7 @@ export const DropletFactory = (color: vec3 | vec4 | number): typeof DropletBase
|
||||||
|
|
||||||
float h = clamp(
|
float h = clamp(
|
||||||
dot(targetFromDelta, toFromDeltas[i])
|
dot(targetFromDelta, toFromDeltas[i])
|
||||||
/ dot(toFromDeltas[i], toFromDeltas[i]),
|
/ max(dot(toFromDeltas[i], toFromDeltas[i]), 0.00000001),
|
||||||
0.0, 1.0
|
0.0, 1.0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ export const InvertedTunnelFactory = (
|
||||||
vec2 targetFromDelta = target - froms[i];
|
vec2 targetFromDelta = target - froms[i];
|
||||||
|
|
||||||
float h = dot(targetFromDelta, toFromDeltas[i])
|
float h = dot(targetFromDelta, toFromDeltas[i])
|
||||||
/ dot(toFromDeltas[i], toFromDeltas[i]);
|
/ max(dot(toFromDeltas[i], toFromDeltas[i]), 0.00000001);
|
||||||
|
|
||||||
float clampedH = clamp(h, 0.0, 1.0);
|
float clampedH = clamp(h, 0.0, 1.0);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -40,7 +40,8 @@ export const NoisyPolygonFactory = (
|
||||||
vec2 targetFromDelta = target - from;
|
vec2 targetFromDelta = target - from;
|
||||||
vec2 toFromDelta = to - from;
|
vec2 toFromDelta = to - from;
|
||||||
float h = clamp(
|
float h = clamp(
|
||||||
dot(targetFromDelta, toFromDelta) / dot(toFromDelta, toFromDelta),
|
dot(targetFromDelta, toFromDelta)
|
||||||
|
/ max(dot(toFromDelta, toFromDelta), 0.00000001),
|
||||||
0.0, 1.0
|
0.0, 1.0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -135,9 +136,13 @@ export const NoisyPolygonFactory = (
|
||||||
vec2.scale(center, center, 1 / transformedVertices.length);
|
vec2.scale(center, center, 1 / transformedVertices.length);
|
||||||
|
|
||||||
let length = 0;
|
let length = 0;
|
||||||
for (let i = 1; i < this.vertices.length; i++) {
|
for (let i = 1; i < transformedVertices.length; i++) {
|
||||||
length += vec2.distance(transformedVertices[i - 1], transformedVertices[i]);
|
length += vec2.distance(transformedVertices[i - 1], transformedVertices[i]);
|
||||||
}
|
}
|
||||||
|
length += vec2.distance(
|
||||||
|
transformedVertices[transformedVertices.length - 1],
|
||||||
|
transformedVertices[0]
|
||||||
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
vertices: transformedVertices,
|
vertices: transformedVertices,
|
||||||
|
|
|
||||||
|
|
@ -31,7 +31,8 @@ export const PolygonFactory = (
|
||||||
vec2 targetFromDelta = target - from;
|
vec2 targetFromDelta = target - from;
|
||||||
vec2 toFromDelta = to - from;
|
vec2 toFromDelta = to - from;
|
||||||
float h = clamp(
|
float h = clamp(
|
||||||
dot(targetFromDelta, toFromDelta) / dot(toFromDelta, toFromDelta),
|
dot(targetFromDelta, toFromDelta)
|
||||||
|
/ max(dot(toFromDelta, toFromDelta), 0.00000001),
|
||||||
0.0, 1.0
|
0.0, 1.0
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -93,6 +94,10 @@ export const PolygonFactory = (
|
||||||
constructor(vertices: Array<vec2>) {
|
constructor(vertices: Array<vec2>) {
|
||||||
super(vertices);
|
super(vertices);
|
||||||
|
|
||||||
|
if (vertices.length === 0) {
|
||||||
|
throw new Error('Polygons must have at least one vertex');
|
||||||
|
}
|
||||||
|
|
||||||
if (vertices.length > vertexCount) {
|
if (vertices.length > vertexCount) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Too many vertices, expected ${vertexCount}, got ${vertices.length}`
|
`Too many vertices, expected ${vertexCount}, got ${vertices.length}`
|
||||||
|
|
@ -104,7 +109,7 @@ export const PolygonFactory = (
|
||||||
const startEnd = this.vertices[0];
|
const startEnd = this.vertices[0];
|
||||||
let vb = startEnd;
|
let vb = startEnd;
|
||||||
|
|
||||||
let d = vec2.squaredDistance(target, vb);
|
let d = vec2.distance(target, vb);
|
||||||
let sign = 1;
|
let sign = 1;
|
||||||
|
|
||||||
for (let i = 1; i <= this.vertices.length; i++) {
|
for (let i = 1; i <= this.vertices.length; i++) {
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ export const RotatedRectangleFactory = (
|
||||||
vec2 top = rotatedRectangleTopCenters[i];
|
vec2 top = rotatedRectangleTopCenters[i];
|
||||||
vec2 bottom = rotatedRectangleBottomCenters[i];
|
vec2 bottom = rotatedRectangleBottomCenters[i];
|
||||||
float height = length(bottom - top);
|
float height = length(bottom - top);
|
||||||
vec2 d = (bottom - top) / height;
|
vec2 d = height > 0.00000001 ? (bottom - top) / height : vec2(0.0, 1.0);
|
||||||
|
|
||||||
vec2 q = (target - (top + bottom) * 0.5);
|
vec2 q = (target - (top + bottom) * 0.5);
|
||||||
q = mat2(d.x, -d.y, d.y, d.x) * q;
|
q = mat2(d.x, -d.y, d.y, d.x) * q;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue