@tscircuit/curvy-trace-solver 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -16,7 +16,8 @@ interface CurvyTraceProblem {
16
16
  bounds: Bounds;
17
17
  waypointPairs: WaypointPair[];
18
18
  obstacles: Obstacle[];
19
- preferredSpacing: number;
19
+ preferredTraceToTraceSpacing: number;
20
+ preferredObstacleToTraceSpacing: number;
20
21
  }
21
22
  interface OutputTrace {
22
23
  waypointPair: WaypointPair;
package/dist/index.js CHANGED
@@ -1201,7 +1201,7 @@ var CurvyTraceSolver = class extends BaseSolver {
1201
1201
  }
1202
1202
  // Determine which trace pairs could possibly collide based on bounding boxes
1203
1203
  updateCollisionPairs() {
1204
- const { preferredSpacing } = this.problem;
1204
+ const { preferredTraceToTraceSpacing: preferredSpacing } = this.problem;
1205
1205
  this.collisionPairs = [];
1206
1206
  for (let i = 0; i < this.traces.length; i++) {
1207
1207
  for (let j = i + 1; j < this.traces.length; j++) {
@@ -1216,8 +1216,9 @@ var CurvyTraceSolver = class extends BaseSolver {
1216
1216
  }
1217
1217
  }
1218
1218
  computeTotalCost() {
1219
- const { preferredSpacing } = this.problem;
1220
- const spacingSq = preferredSpacing * preferredSpacing;
1219
+ const { preferredTraceToTraceSpacing, preferredObstacleToTraceSpacing } = this.problem;
1220
+ const traceSpacingSq = preferredTraceToTraceSpacing ** 2;
1221
+ const obstacleSpacingSq = preferredObstacleToTraceSpacing ** 2;
1221
1222
  let cost = 0;
1222
1223
  for (const [i, j] of this.collisionPairs) {
1223
1224
  const pi = this.sampledPoints[i], pj = this.sampledPoints[j];
@@ -1228,10 +1229,10 @@ var CurvyTraceSolver = class extends BaseSolver {
1228
1229
  const b1x = pj[b * 2], b1y = pj[b * 2 + 1];
1229
1230
  const b2x = pj[(b + 1) * 2], b2y = pj[(b + 1) * 2 + 1];
1230
1231
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y);
1231
- if (distSq < spacingSq) {
1232
+ if (distSq < traceSpacingSq) {
1232
1233
  const dist = Math.sqrt(distSq);
1233
- cost += (preferredSpacing - dist) ** 2;
1234
- if (distSq < 1e-18) cost += 20 * spacingSq;
1234
+ cost += (preferredTraceToTraceSpacing - dist) ** 2;
1235
+ if (distSq < 1e-18) cost += 20 * traceSpacingSq;
1235
1236
  }
1236
1237
  }
1237
1238
  }
@@ -1250,16 +1251,16 @@ var CurvyTraceSolver = class extends BaseSolver {
1250
1251
  const oy2 = this.obstacleSegments[obsBase + 3];
1251
1252
  const obsMinX = Math.min(ox1, ox2), obsMaxX = Math.max(ox1, ox2);
1252
1253
  const obsMinY = Math.min(oy1, oy2), obsMaxY = Math.max(oy1, oy2);
1253
- if (bi.maxX + preferredSpacing < obsMinX || obsMaxX + preferredSpacing < bi.minX || bi.maxY + preferredSpacing < obsMinY || obsMaxY + preferredSpacing < bi.minY)
1254
+ if (bi.maxX + preferredObstacleToTraceSpacing < obsMinX || obsMaxX + preferredObstacleToTraceSpacing < bi.minX || bi.maxY + preferredObstacleToTraceSpacing < obsMinY || obsMaxY + preferredObstacleToTraceSpacing < bi.minY)
1254
1255
  continue;
1255
1256
  for (let a = 0; a < OPT_SAMPLES; a++) {
1256
1257
  const a1x = pi[a * 2], a1y = pi[a * 2 + 1];
1257
1258
  const a2x = pi[(a + 1) * 2], a2y = pi[(a + 1) * 2 + 1];
1258
1259
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, ox1, oy1, ox2, oy2);
1259
- if (distSq < spacingSq) {
1260
+ if (distSq < obstacleSpacingSq) {
1260
1261
  const dist = Math.sqrt(distSq);
1261
- cost += (preferredSpacing - dist) ** 2;
1262
- if (distSq < 1e-18) cost += 20 * spacingSq;
1262
+ cost += (preferredObstacleToTraceSpacing - dist) ** 2;
1263
+ if (distSq < 1e-18) cost += 20 * obstacleSpacingSq;
1263
1264
  }
1264
1265
  }
1265
1266
  }
@@ -1267,8 +1268,9 @@ var CurvyTraceSolver = class extends BaseSolver {
1267
1268
  return cost;
1268
1269
  }
1269
1270
  computeCostForTrace(traceIdx) {
1270
- const { preferredSpacing } = this.problem;
1271
- const spacingSq = preferredSpacing * preferredSpacing;
1271
+ const { preferredTraceToTraceSpacing, preferredObstacleToTraceSpacing } = this.problem;
1272
+ const traceSpacingSq = preferredTraceToTraceSpacing ** 2;
1273
+ const obstacleSpacingSq = preferredObstacleToTraceSpacing ** 2;
1272
1274
  const trace = this.traces[traceIdx];
1273
1275
  const pi = this.sampledPoints[traceIdx];
1274
1276
  const bi = this.traceBounds[traceIdx];
@@ -1279,7 +1281,7 @@ var CurvyTraceSolver = class extends BaseSolver {
1279
1281
  if (trace.networkId && other.networkId && trace.networkId === other.networkId)
1280
1282
  continue;
1281
1283
  const bj = this.traceBounds[j];
1282
- if (bi.maxX + preferredSpacing < bj.minX || bj.maxX + preferredSpacing < bi.minX || bi.maxY + preferredSpacing < bj.minY || bj.maxY + preferredSpacing < bi.minY)
1284
+ if (bi.maxX + preferredTraceToTraceSpacing < bj.minX || bj.maxX + preferredTraceToTraceSpacing < bi.minX || bi.maxY + preferredTraceToTraceSpacing < bj.minY || bj.maxY + preferredTraceToTraceSpacing < bi.minY)
1283
1285
  continue;
1284
1286
  const pj = this.sampledPoints[j];
1285
1287
  for (let a = 0; a < OPT_SAMPLES; a++) {
@@ -1289,10 +1291,10 @@ var CurvyTraceSolver = class extends BaseSolver {
1289
1291
  const b1x = pj[b * 2], b1y = pj[b * 2 + 1];
1290
1292
  const b2x = pj[(b + 1) * 2], b2y = pj[(b + 1) * 2 + 1];
1291
1293
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y);
1292
- if (distSq < spacingSq) {
1294
+ if (distSq < traceSpacingSq) {
1293
1295
  const dist = Math.sqrt(distSq);
1294
- cost += (preferredSpacing - dist) ** 2;
1295
- if (distSq < 1e-18) cost += 20 * spacingSq;
1296
+ cost += (preferredTraceToTraceSpacing - dist) ** 2;
1297
+ if (distSq < 1e-18) cost += 20 * traceSpacingSq;
1296
1298
  }
1297
1299
  }
1298
1300
  }
@@ -1307,16 +1309,16 @@ var CurvyTraceSolver = class extends BaseSolver {
1307
1309
  const oy2 = this.obstacleSegments[obsBase + 3];
1308
1310
  const obsMinX = Math.min(ox1, ox2), obsMaxX = Math.max(ox1, ox2);
1309
1311
  const obsMinY = Math.min(oy1, oy2), obsMaxY = Math.max(oy1, oy2);
1310
- if (bi.maxX + preferredSpacing < obsMinX || obsMaxX + preferredSpacing < bi.minX || bi.maxY + preferredSpacing < obsMinY || obsMaxY + preferredSpacing < bi.minY)
1312
+ if (bi.maxX + preferredObstacleToTraceSpacing < obsMinX || obsMaxX + preferredObstacleToTraceSpacing < bi.minX || bi.maxY + preferredObstacleToTraceSpacing < obsMinY || obsMaxY + preferredObstacleToTraceSpacing < bi.minY)
1311
1313
  continue;
1312
1314
  for (let a = 0; a < OPT_SAMPLES; a++) {
1313
1315
  const a1x = pi[a * 2], a1y = pi[a * 2 + 1];
1314
1316
  const a2x = pi[(a + 1) * 2], a2y = pi[(a + 1) * 2 + 1];
1315
1317
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, ox1, oy1, ox2, oy2);
1316
- if (distSq < spacingSq) {
1318
+ if (distSq < obstacleSpacingSq) {
1317
1319
  const dist = Math.sqrt(distSq);
1318
- cost += (preferredSpacing - dist) ** 2;
1319
- if (distSq < 1e-18) cost += 20 * spacingSq;
1320
+ cost += (preferredObstacleToTraceSpacing - dist) ** 2;
1321
+ if (distSq < 1e-18) cost += 20 * obstacleSpacingSq;
1320
1322
  }
1321
1323
  }
1322
1324
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tscircuit/curvy-trace-solver",
3
3
  "main": "dist/index.js",
4
- "version": "0.0.5",
4
+ "version": "0.0.6",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",