Stop dividing by zero

This commit is contained in:
Andras Schmelczer 2026-06-10 21:36:13 +01:00
parent 9a06d92ed7
commit bd2307f782
5 changed files with 20 additions and 10 deletions

View file

@ -41,7 +41,7 @@ export const DropletFactory = (color: vec3 | vec4 | number): typeof DropletBase
float h = clamp(
dot(targetFromDelta, toFromDeltas[i])
/ dot(toFromDeltas[i], toFromDeltas[i]),
/ max(dot(toFromDeltas[i], toFromDeltas[i]), 0.00000001),
0.0, 1.0
);

View file

@ -63,7 +63,7 @@ export const InvertedTunnelFactory = (
vec2 targetFromDelta = target - froms[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);

View file

@ -40,7 +40,8 @@ export const NoisyPolygonFactory = (
vec2 targetFromDelta = target - from;
vec2 toFromDelta = to - from;
float h = clamp(
dot(targetFromDelta, toFromDelta) / dot(toFromDelta, toFromDelta),
dot(targetFromDelta, toFromDelta)
/ max(dot(toFromDelta, toFromDelta), 0.00000001),
0.0, 1.0
);
@ -135,9 +136,13 @@ export const NoisyPolygonFactory = (
vec2.scale(center, center, 1 / transformedVertices.length);
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[transformedVertices.length - 1],
transformedVertices[0]
);
return {
vertices: transformedVertices,

View file

@ -31,7 +31,8 @@ export const PolygonFactory = (
vec2 targetFromDelta = target - from;
vec2 toFromDelta = to - from;
float h = clamp(
dot(targetFromDelta, toFromDelta) / dot(toFromDelta, toFromDelta),
dot(targetFromDelta, toFromDelta)
/ max(dot(toFromDelta, toFromDelta), 0.00000001),
0.0, 1.0
);
@ -93,6 +94,10 @@ export const PolygonFactory = (
constructor(vertices: Array<vec2>) {
super(vertices);
if (vertices.length === 0) {
throw new Error('Polygons must have at least one vertex');
}
if (vertices.length > vertexCount) {
throw new Error(
`Too many vertices, expected ${vertexCount}, got ${vertices.length}`
@ -104,7 +109,7 @@ export const PolygonFactory = (
const startEnd = this.vertices[0];
let vb = startEnd;
let d = vec2.squaredDistance(target, vb);
let d = vec2.distance(target, vb);
let sign = 1;
for (let i = 1; i <= this.vertices.length; i++) {
@ -141,9 +146,9 @@ export const PolygonFactory = (
private get actualVertices(): Array<vec2> {
return this.vertices.length < vertexCount
? ([
...this.vertices,
...new Array(vertexCount - this.vertices.length).fill(this.vertices[0]),
] as Array<vec2>)
...this.vertices,
...new Array(vertexCount - this.vertices.length).fill(this.vertices[0]),
] as Array<vec2>)
: this.vertices;
}

View file

@ -39,7 +39,7 @@ export const RotatedRectangleFactory = (
vec2 top = rotatedRectangleTopCenters[i];
vec2 bottom = rotatedRectangleBottomCenters[i];
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);
q = mat2(d.x, -d.y, d.y, d.x) * q;