@tscircuit/curvy-trace-solver 0.0.4 → 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
@@ -871,7 +871,8 @@ var visualizeCurvyTraceProblem = (problem, outputTraces = []) => {
871
871
  width: obstacle.maxX - obstacle.minX,
872
872
  height: obstacle.maxY - obstacle.minY,
873
873
  fill: "rgba(128, 128, 128, 0.3)",
874
- stroke: "rgba(128, 128, 128, 0.8)"
874
+ stroke: "rgba(128, 128, 128, 0.8)",
875
+ label: `netId: ${obstacle.networkId}`
875
876
  });
876
877
  }
877
878
  for (const trace of outputTraces) {
@@ -1200,7 +1201,7 @@ var CurvyTraceSolver = class extends BaseSolver {
1200
1201
  }
1201
1202
  // Determine which trace pairs could possibly collide based on bounding boxes
1202
1203
  updateCollisionPairs() {
1203
- const { preferredSpacing } = this.problem;
1204
+ const { preferredTraceToTraceSpacing: preferredSpacing } = this.problem;
1204
1205
  this.collisionPairs = [];
1205
1206
  for (let i = 0; i < this.traces.length; i++) {
1206
1207
  for (let j = i + 1; j < this.traces.length; j++) {
@@ -1215,8 +1216,9 @@ var CurvyTraceSolver = class extends BaseSolver {
1215
1216
  }
1216
1217
  }
1217
1218
  computeTotalCost() {
1218
- const { preferredSpacing } = this.problem;
1219
- const spacingSq = preferredSpacing * preferredSpacing;
1219
+ const { preferredTraceToTraceSpacing, preferredObstacleToTraceSpacing } = this.problem;
1220
+ const traceSpacingSq = preferredTraceToTraceSpacing ** 2;
1221
+ const obstacleSpacingSq = preferredObstacleToTraceSpacing ** 2;
1220
1222
  let cost = 0;
1221
1223
  for (const [i, j] of this.collisionPairs) {
1222
1224
  const pi = this.sampledPoints[i], pj = this.sampledPoints[j];
@@ -1227,10 +1229,10 @@ var CurvyTraceSolver = class extends BaseSolver {
1227
1229
  const b1x = pj[b * 2], b1y = pj[b * 2 + 1];
1228
1230
  const b2x = pj[(b + 1) * 2], b2y = pj[(b + 1) * 2 + 1];
1229
1231
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y);
1230
- if (distSq < spacingSq) {
1232
+ if (distSq < traceSpacingSq) {
1231
1233
  const dist = Math.sqrt(distSq);
1232
- cost += (preferredSpacing - dist) ** 2;
1233
- if (distSq < 1e-18) cost += 20 * spacingSq;
1234
+ cost += (preferredTraceToTraceSpacing - dist) ** 2;
1235
+ if (distSq < 1e-18) cost += 20 * traceSpacingSq;
1234
1236
  }
1235
1237
  }
1236
1238
  }
@@ -1249,16 +1251,16 @@ var CurvyTraceSolver = class extends BaseSolver {
1249
1251
  const oy2 = this.obstacleSegments[obsBase + 3];
1250
1252
  const obsMinX = Math.min(ox1, ox2), obsMaxX = Math.max(ox1, ox2);
1251
1253
  const obsMinY = Math.min(oy1, oy2), obsMaxY = Math.max(oy1, oy2);
1252
- 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)
1253
1255
  continue;
1254
1256
  for (let a = 0; a < OPT_SAMPLES; a++) {
1255
1257
  const a1x = pi[a * 2], a1y = pi[a * 2 + 1];
1256
1258
  const a2x = pi[(a + 1) * 2], a2y = pi[(a + 1) * 2 + 1];
1257
1259
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, ox1, oy1, ox2, oy2);
1258
- if (distSq < spacingSq) {
1260
+ if (distSq < obstacleSpacingSq) {
1259
1261
  const dist = Math.sqrt(distSq);
1260
- cost += (preferredSpacing - dist) ** 2;
1261
- if (distSq < 1e-18) cost += 20 * spacingSq;
1262
+ cost += (preferredObstacleToTraceSpacing - dist) ** 2;
1263
+ if (distSq < 1e-18) cost += 20 * obstacleSpacingSq;
1262
1264
  }
1263
1265
  }
1264
1266
  }
@@ -1266,8 +1268,9 @@ var CurvyTraceSolver = class extends BaseSolver {
1266
1268
  return cost;
1267
1269
  }
1268
1270
  computeCostForTrace(traceIdx) {
1269
- const { preferredSpacing } = this.problem;
1270
- const spacingSq = preferredSpacing * preferredSpacing;
1271
+ const { preferredTraceToTraceSpacing, preferredObstacleToTraceSpacing } = this.problem;
1272
+ const traceSpacingSq = preferredTraceToTraceSpacing ** 2;
1273
+ const obstacleSpacingSq = preferredObstacleToTraceSpacing ** 2;
1271
1274
  const trace = this.traces[traceIdx];
1272
1275
  const pi = this.sampledPoints[traceIdx];
1273
1276
  const bi = this.traceBounds[traceIdx];
@@ -1278,7 +1281,7 @@ var CurvyTraceSolver = class extends BaseSolver {
1278
1281
  if (trace.networkId && other.networkId && trace.networkId === other.networkId)
1279
1282
  continue;
1280
1283
  const bj = this.traceBounds[j];
1281
- 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)
1282
1285
  continue;
1283
1286
  const pj = this.sampledPoints[j];
1284
1287
  for (let a = 0; a < OPT_SAMPLES; a++) {
@@ -1288,10 +1291,10 @@ var CurvyTraceSolver = class extends BaseSolver {
1288
1291
  const b1x = pj[b * 2], b1y = pj[b * 2 + 1];
1289
1292
  const b2x = pj[(b + 1) * 2], b2y = pj[(b + 1) * 2 + 1];
1290
1293
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, b1x, b1y, b2x, b2y);
1291
- if (distSq < spacingSq) {
1294
+ if (distSq < traceSpacingSq) {
1292
1295
  const dist = Math.sqrt(distSq);
1293
- cost += (preferredSpacing - dist) ** 2;
1294
- if (distSq < 1e-18) cost += 20 * spacingSq;
1296
+ cost += (preferredTraceToTraceSpacing - dist) ** 2;
1297
+ if (distSq < 1e-18) cost += 20 * traceSpacingSq;
1295
1298
  }
1296
1299
  }
1297
1300
  }
@@ -1306,16 +1309,16 @@ var CurvyTraceSolver = class extends BaseSolver {
1306
1309
  const oy2 = this.obstacleSegments[obsBase + 3];
1307
1310
  const obsMinX = Math.min(ox1, ox2), obsMaxX = Math.max(ox1, ox2);
1308
1311
  const obsMinY = Math.min(oy1, oy2), obsMaxY = Math.max(oy1, oy2);
1309
- 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)
1310
1313
  continue;
1311
1314
  for (let a = 0; a < OPT_SAMPLES; a++) {
1312
1315
  const a1x = pi[a * 2], a1y = pi[a * 2 + 1];
1313
1316
  const a2x = pi[(a + 1) * 2], a2y = pi[(a + 1) * 2 + 1];
1314
1317
  const distSq = segmentDistSq(a1x, a1y, a2x, a2y, ox1, oy1, ox2, oy2);
1315
- if (distSq < spacingSq) {
1318
+ if (distSq < obstacleSpacingSq) {
1316
1319
  const dist = Math.sqrt(distSq);
1317
- cost += (preferredSpacing - dist) ** 2;
1318
- if (distSq < 1e-18) cost += 20 * spacingSq;
1320
+ cost += (preferredObstacleToTraceSpacing - dist) ** 2;
1321
+ if (distSq < 1e-18) cost += 20 * obstacleSpacingSq;
1319
1322
  }
1320
1323
  }
1321
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.4",
4
+ "version": "0.0.6",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "start": "cosmos",