@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 +2 -1
- package/dist/index.js +22 -20
- package/package.json +1 -1
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
|
-
|
|
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 {
|
|
1220
|
-
const
|
|
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 <
|
|
1232
|
+
if (distSq < traceSpacingSq) {
|
|
1232
1233
|
const dist = Math.sqrt(distSq);
|
|
1233
|
-
cost += (
|
|
1234
|
-
if (distSq < 1e-18) cost += 20 *
|
|
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 +
|
|
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 <
|
|
1260
|
+
if (distSq < obstacleSpacingSq) {
|
|
1260
1261
|
const dist = Math.sqrt(distSq);
|
|
1261
|
-
cost += (
|
|
1262
|
-
if (distSq < 1e-18) cost += 20 *
|
|
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 {
|
|
1271
|
-
const
|
|
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 +
|
|
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 <
|
|
1294
|
+
if (distSq < traceSpacingSq) {
|
|
1293
1295
|
const dist = Math.sqrt(distSq);
|
|
1294
|
-
cost += (
|
|
1295
|
-
if (distSq < 1e-18) cost += 20 *
|
|
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 +
|
|
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 <
|
|
1318
|
+
if (distSq < obstacleSpacingSq) {
|
|
1317
1319
|
const dist = Math.sqrt(distSq);
|
|
1318
|
-
cost += (
|
|
1319
|
-
if (distSq < 1e-18) cost += 20 *
|
|
1320
|
+
cost += (preferredObstacleToTraceSpacing - dist) ** 2;
|
|
1321
|
+
if (distSq < 1e-18) cost += 20 * obstacleSpacingSq;
|
|
1320
1322
|
}
|
|
1321
1323
|
}
|
|
1322
1324
|
}
|