@tscircuit/schematic-trace-solver 0.0.40 → 0.0.42

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.
Files changed (57) hide show
  1. package/dist/index.d.ts +155 -9
  2. package/dist/index.js +998 -479
  3. package/lib/solvers/LongDistancePairSolver/LongDistancePairSolver.ts +238 -0
  4. package/lib/solvers/SchematicTracePipelineSolver/SchematicTracePipelineSolver.ts +61 -26
  5. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.ts +94 -192
  6. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/rerouteCollidingTrace.ts +13 -24
  7. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/LabelMergingSolver/LabelMergingSolver.ts +205 -0
  8. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/OverlapAvoidanceStepSolver/OverlapAvoidanceStepSolver.ts +144 -0
  9. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/SingleOverlapSolver/SingleOverlapSolver.ts +117 -0
  10. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/sub-solvers/TraceCleanupSolver/TraceCleanupSolver.ts +132 -0
  11. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{balanceLShapes.ts → sub-solvers/TraceCleanupSolver/balanceLShapes.ts} +12 -10
  12. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{hasCollisions.ts → sub-solvers/TraceCleanupSolver/hasCollisions.ts} +1 -1
  13. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{hasCollisionsWithLabels.ts → sub-solvers/TraceCleanupSolver/hasCollisionsWithLabels.ts} +1 -1
  14. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{minimizeTurnsWithFilteredLabels.ts → sub-solvers/TraceCleanupSolver/minimizeTurnsWithFilteredLabels.ts} +6 -6
  15. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{simplifyPath.ts → sub-solvers/TraceCleanupSolver/simplifyPath.ts} +1 -1
  16. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{turnMinimization.ts → sub-solvers/TraceCleanupSolver/turnMinimization.ts} +0 -2
  17. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/tryFourPointDetour.ts +104 -0
  18. package/lib/solvers/TraceLabelOverlapAvoidanceSolver/trySnipAndReconnect.ts +24 -154
  19. package/lib/utils/does-trace-overlap-with-existing-traces.ts +33 -0
  20. package/package.json +1 -1
  21. package/site/examples/example25.page.tsx +4 -0
  22. package/tests/assets/1.input.json +379 -0
  23. package/tests/assets/2.input.json +330 -0
  24. package/tests/assets/3.input.json +388 -0
  25. package/tests/assets/MergedNetLabelObstacles.test.input.json +154 -0
  26. package/tests/assets/OverlapAvoidanceStepSolver.test.input.json +682 -0
  27. package/tests/assets/SingleOverlapSolver.test.input.json +170 -0
  28. package/tests/assets/TraceCleanupSolver.test.input.json +216 -0
  29. package/tests/assets/TraceLabelOverlapAvoidanceSolver.test.input.json +424 -0
  30. package/tests/assets/example25.json +96 -0
  31. package/tests/examples/__snapshots__/example03.snap.svg +67 -76
  32. package/tests/examples/__snapshots__/example10.snap.svg +24 -30
  33. package/tests/examples/__snapshots__/example13.snap.svg +81 -84
  34. package/tests/examples/__snapshots__/example15.snap.svg +5 -8
  35. package/tests/examples/__snapshots__/example21.snap.svg +68 -74
  36. package/tests/examples/__snapshots__/example25.snap.svg +3 -3
  37. package/tests/examples/__snapshots__/example26.snap.svg +3 -3
  38. package/tests/examples/__snapshots__/example28.snap.svg +273 -0
  39. package/tests/examples/example28.test.ts +13 -0
  40. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/TraceLabelOverlapAvoidanceSolver.test.ts +18 -0
  41. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/__snapshots__/TraceLabelOverlapAvoidanceSolver.snap.svg +243 -0
  42. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView01.snap.svg +223 -0
  43. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView02.snap.svg +205 -0
  44. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/__snapshots__/renderComparisonView03.snap.svg +184 -0
  45. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/renderComparisonView01.test.ts +29 -0
  46. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/renderComparisonView02.test.ts +27 -0
  47. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/renderComparisonView/renderComparisonView03.test.ts +39 -0
  48. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/MergedNetLabelObstacles.test.ts +14 -0
  49. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/OverlapAvoidanceStepSolver.test.ts +20 -0
  50. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/SingleOverlapSolver.test.ts +10 -0
  51. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/TraceCleanupSolver.test.ts +19 -0
  52. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/MergedNetLabelObstacles.snap.svg +140 -0
  53. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/OverlapAvoidanceStepSolver.snap.svg +216 -0
  54. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/SingleOverlapSolver.snap.svg +125 -0
  55. package/tests/solvers/TraceLabelOverlapAvoidanceSolver/sub-solver/__snapshots__/TraceCleanupSolver.snap.svg +119 -0
  56. /package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{countTurns.ts → sub-solvers/TraceCleanupSolver/countTurns.ts} +0 -0
  57. /package/lib/solvers/TraceLabelOverlapAvoidanceSolver/{tryConnectPoints.ts → sub-solvers/TraceCleanupSolver/tryConnectPoints.ts} +0 -0
@@ -2,225 +2,216 @@
2
2
  <rect width="100%" height="100%" fill="white" />
3
3
  <g>
4
4
  <circle data-type="point" data-label="PIN1_PIN2.1
5
- x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.9568626609827" cy="217.33014662474903" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
5
+ x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.55755929219254" cy="217.7151979959293" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
6
6
  </g>
7
7
  <g>
8
8
  <circle data-type="point" data-label="PIN1_PIN2.2
9
- x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.9568626609827" cy="217.33014662474903" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
9
+ x-" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.55755929219254" cy="217.7151979959293" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
10
10
  </g>
11
11
  <g>
12
12
  <circle data-type="point" data-label="PIN1_PIN2.3
13
- x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="142.8964057073185" cy="217.36125319394677" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
13
+ x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="141.6107074874649" cy="217.7459158862381" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
14
14
  </g>
15
15
  <g>
16
16
  <circle data-type="point" data-label="PIN1_PIN2.4
17
- x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="142.8964057073185" cy="217.36125319394677" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
17
+ x+" data-x="-2.4994231089999994" data-y="1.4485175000000003" cx="141.6107074874649" cy="217.7459158862381" r="3" fill="hsl(328, 100%, 50%, 0.8)" />
18
18
  </g>
19
19
  <g>
20
20
  <circle data-type="point" data-label="PIN1_PIN3.1
21
- x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="284.5302284768321" cy="217.33014662474903" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
21
+ x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="281.47480513826264" cy="217.7151979959293" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
22
22
  </g>
23
23
  <g>
24
24
  <circle data-type="point" data-label="PIN1_PIN3.2
25
- x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="284.5302284768321" cy="217.33014662474903" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
25
+ x-" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="281.47480513826264" cy="217.7151979959293" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
26
26
  </g>
27
27
  <g>
28
28
  <circle data-type="point" data-label="PIN1_PIN3.3
29
- x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="355.4697715231679" cy="217.36125319394677" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
29
+ x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="351.527953333535" cy="217.7459158862381" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
30
30
  </g>
31
31
  <g>
32
32
  <circle data-type="point" data-label="PIN1_PIN3.4
33
- x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="355.4697715231679" cy="217.36125319394677" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
33
+ x+" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="351.527953333535" cy="217.7459158862381" r="3" fill="hsl(208, 100%, 50%, 0.8)" />
34
34
  </g>
35
35
  <g>
36
36
  <circle data-type="point" data-label="PIN1_PIN4.1
37
- x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="497.10359429268146" cy="217.33014662474903" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
37
+ x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="491.39205098433274" cy="217.7151979959293" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
38
38
  </g>
39
39
  <g>
40
40
  <circle data-type="point" data-label="PIN1_PIN4.2
41
- x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="497.10359429268146" cy="217.33014662474903" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
41
+ x-" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="491.39205098433274" cy="217.7151979959293" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
42
42
  </g>
43
43
  <g>
44
44
  <circle data-type="point" data-label="PIN1_PIN4.3
45
- x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="568.0431373390173" cy="217.36125319394677" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
45
+ x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="561.4451991796051" cy="217.7459158862381" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
46
46
  </g>
47
47
  <g>
48
48
  <circle data-type="point" data-label="PIN1_PIN4.4
49
- x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="568.0431373390173" cy="217.36125319394677" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
49
+ x+" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="561.4451991796051" cy="217.7459158862381" r="3" fill="hsl(88, 100%, 50%, 0.8)" />
50
50
  </g>
51
51
  <g>
52
52
  <circle data-type="point" data-label="PIN2_PIN3.1
53
- x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.9568626609827" cy="429.90351244059843" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
53
+ x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.55755929219254" cy="427.63244384199936" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
54
54
  </g>
55
55
  <g>
56
56
  <circle data-type="point" data-label="PIN2_PIN3.2
57
- x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.9568626609827" cy="429.90351244059843" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
57
+ x-" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.55755929219254" cy="427.63244384199936" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
58
58
  </g>
59
59
  <g>
60
60
  <circle data-type="point" data-label="PIN2_PIN3.3
61
- x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="142.8964057073185" cy="429.93461900979617" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
61
+ x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="141.6107074874649" cy="427.6631617323082" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
62
62
  </g>
63
63
  <g>
64
64
  <circle data-type="point" data-label="PIN2_PIN3.4
65
- x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="142.8964057073185" cy="429.93461900979617" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
65
+ x+" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="141.6107074874649" cy="427.6631617323082" r="3" fill="hsl(240, 100%, 50%, 0.8)" />
66
66
  </g>
67
67
  <g>
68
68
  <circle data-type="point" data-label="PIN2_PIN4.1
69
- x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="284.5302284768321" cy="429.90351244059843" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
69
+ x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="281.47480513826264" cy="427.63244384199936" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
70
70
  </g>
71
71
  <g>
72
72
  <circle data-type="point" data-label="PIN2_PIN4.2
73
- x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="284.5302284768321" cy="429.90351244059843" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
73
+ x-" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="281.47480513826264" cy="427.63244384199936" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
74
74
  </g>
75
75
  <g>
76
76
  <circle data-type="point" data-label="PIN2_PIN4.3
77
- x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="355.4697715231679" cy="429.93461900979617" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
77
+ x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="351.527953333535" cy="427.6631617323082" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
78
78
  </g>
79
79
  <g>
80
80
  <circle data-type="point" data-label="PIN2_PIN4.4
81
- x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="355.4697715231679" cy="429.93461900979617" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
81
+ x+" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="351.527953333535" cy="427.6631617323082" r="3" fill="hsl(120, 100%, 50%, 0.8)" />
82
82
  </g>
83
83
  <g>
84
84
  <circle data-type="point" data-label="PIN3_PIN4.1
85
- x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="497.10359429268146" cy="429.90351244059843" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
85
+ x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="491.39205098433274" cy="427.63244384199936" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
86
86
  </g>
87
87
  <g>
88
88
  <circle data-type="point" data-label="PIN3_PIN4.2
89
- x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="497.10359429268146" cy="429.90351244059843" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
89
+ x-" data-x="2.4994231089999994" data-y="-1.5510434999999996" cx="491.39205098433274" cy="427.63244384199936" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
90
90
  </g>
91
91
  <g>
92
92
  <circle data-type="point" data-label="PIN3_PIN4.3
93
- x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="568.0431373390173" cy="429.93461900979617" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
93
+ x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="561.4451991796051" cy="427.6631617323082" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
94
94
  </g>
95
95
  <g>
96
96
  <circle data-type="point" data-label="PIN3_PIN4.4
97
- x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="568.0431373390173" cy="429.93461900979617" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
97
+ x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="561.4451991796051" cy="427.6631617323082" r="3" fill="hsl(152, 100%, 50%, 0.8)" />
98
98
  </g>
99
99
  <g>
100
- <circle data-type="point" data-label="" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.9568626609827" cy="217.33014662474903" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
100
+ <circle data-type="point" data-label="" data-x="-3.7005768910000008" data-y="1.4489565000000004" cx="57.56307623578783" cy="217.7151979959293" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
101
101
  </g>
102
102
  <g>
103
- <circle data-type="point" data-label="" data-x="-0.5005768910000006" data-y="1.4489565000000004" cx="284.5302284768321" cy="217.33014662474903" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
103
+ <circle data-type="point" data-label="" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="491.39205098433274" cy="217.7151979959293" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
104
104
  </g>
105
105
  <g>
106
- <circle data-type="point" data-label="" data-x="2.4994231089999994" data-y="1.4489565000000004" cx="497.10359429268146" cy="217.33014662474903" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
106
+ <circle data-type="point" data-label="" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.55755929219254" cy="217.7151979959293" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
107
107
  </g>
108
108
  <g>
109
- <circle data-type="point" data-label="" data-x="-3.5005768910000006" data-y="1.4489565000000004" cx="71.9568626609827" cy="217.33014662474903" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
109
+ <circle data-type="point" data-label="" data-x="-3.7005768910000008" data-y="-1.5510434999999996" cx="57.56307623578783" cy="427.63244384199936" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
110
110
  </g>
111
111
  <g>
112
- <circle data-type="point" data-label="" data-x="-3.5005768910000006" data-y="-1.5510434999999996" cx="71.9568626609827" cy="429.90351244059843" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
112
+ <circle data-type="point" data-label="" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="351.527953333535" cy="217.7459158862381" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
113
113
  </g>
114
114
  <g>
115
- <circle data-type="point" data-label="" data-x="-0.5005768910000006" data-y="-1.5510434999999996" cx="284.5302284768321" cy="429.90351244059843" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
115
+ <circle data-type="point" data-label="" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="141.6107074874649" cy="427.6631617323082" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
116
116
  </g>
117
117
  <g>
118
- <circle data-type="point" data-label="" data-x="0.5005768910000006" data-y="1.4485175000000003" cx="355.4697715231679" cy="217.36125319394677" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
118
+ <circle data-type="point" data-label="" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="561.4451991796051" cy="427.6631617323082" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
119
119
  </g>
120
120
  <g>
121
- <circle data-type="point" data-label="" data-x="-2.4994231089999994" data-y="-1.5514824999999997" cx="142.8964057073185" cy="429.93461900979617" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
121
+ <circle data-type="point" data-label="" data-x="3.7760768910000007" data-y="1.4485175000000003" cx="580.7225995898025" cy="217.7459158862381" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
122
122
  </g>
123
123
  <g>
124
- <circle data-type="point" data-label="" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="568.0431373390173" cy="429.93461900979617" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
124
+ <circle data-type="point" data-label="" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="351.527953333535" cy="427.6631617323082" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
125
125
  </g>
126
126
  <g>
127
- <circle data-type="point" data-label="" data-x="3.5005768910000006" data-y="1.4485175000000003" cx="568.0431373390173" cy="217.36125319394677" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
127
+ <polyline data-points="-3.5005768910000006,1.4489565000000004 -0.5005768910000006,1.4489565000000004" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 281.47480513826264,217.7151979959293" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
128
128
  </g>
129
129
  <g>
130
- <circle data-type="point" data-label="" data-x="0.5005768910000006" data-y="-1.5514824999999997" cx="355.4697715231679" cy="429.93461900979617" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
130
+ <polyline data-points="-3.5005768910000006,1.4489565000000004 2.4994231089999994,1.4489565000000004" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 491.39205098433274,217.7151979959293" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
131
131
  </g>
132
132
  <g>
133
- <circle data-type="point" data-label="" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="568.0431373390173" cy="429.93461900979617" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
133
+ <polyline data-points="-0.5005768910000006,1.4489565000000004 2.4994231089999994,1.4489565000000004" data-type="line" data-label="" points="281.47480513826264,217.7151979959293 491.39205098433274,217.7151979959293" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
134
134
  </g>
135
135
  <g>
136
- <polyline data-points="-3.5005768910000006,1.4489565000000004 -0.5005768910000006,1.4489565000000004" data-type="line" data-label="" points="71.9568626609827,217.33014662474903 284.5302284768321,217.33014662474903" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
136
+ <polyline data-points="-3.5005768910000006,1.4489565000000004 -3.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 71.55755929219254,427.63244384199936" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
137
137
  </g>
138
138
  <g>
139
- <polyline data-points="-3.5005768910000006,1.4489565000000004 2.4994231089999994,1.4489565000000004" data-type="line" data-label="" points="71.9568626609827,217.33014662474903 497.10359429268146,217.33014662474903" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
139
+ <polyline data-points="-3.5005768910000006,1.4489565000000004 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 281.47480513826264,427.63244384199936" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
140
140
  </g>
141
141
  <g>
142
- <polyline data-points="-0.5005768910000006,1.4489565000000004 2.4994231089999994,1.4489565000000004" data-type="line" data-label="" points="284.5302284768321,217.33014662474903 497.10359429268146,217.33014662474903" fill="none" stroke="hsl(340, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
142
+ <polyline data-points="-3.5005768910000006,-1.5510434999999996 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,427.63244384199936 281.47480513826264,427.63244384199936" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
143
143
  </g>
144
144
  <g>
145
- <polyline data-points="-3.5005768910000006,1.4489565000000004 -3.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.9568626609827,217.33014662474903 71.9568626609827,429.90351244059843" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
145
+ <polyline data-points="0.5005768910000006,1.4485175000000003 -2.4994231089999994,-1.5514824999999997" data-type="line" data-label="" points="351.527953333535,217.7459158862381 141.6107074874649,427.6631617323082" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
146
146
  </g>
147
147
  <g>
148
- <polyline data-points="-3.5005768910000006,1.4489565000000004 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.9568626609827,217.33014662474903 284.5302284768321,429.90351244059843" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
148
+ <polyline data-points="0.5005768910000006,1.4485175000000003 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="351.527953333535,217.7459158862381 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
149
149
  </g>
150
150
  <g>
151
- <polyline data-points="-3.5005768910000006,-1.5510434999999996 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.9568626609827,429.90351244059843 284.5302284768321,429.90351244059843" fill="none" stroke="hsl(341, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
151
+ <polyline data-points="-2.4994231089999994,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="141.6107074874649,427.6631617323082 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
152
152
  </g>
153
153
  <g>
154
- <polyline data-points="0.5005768910000006,1.4485175000000003 -2.4994231089999994,-1.5514824999999997" data-type="line" data-label="" points="355.4697715231679,217.36125319394677 142.8964057073185,429.93461900979617" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
154
+ <polyline data-points="3.5005768910000006,1.4485175000000003 0.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="561.4451991796051,217.7459158862381 351.527953333535,427.6631617323082" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
155
155
  </g>
156
156
  <g>
157
- <polyline data-points="0.5005768910000006,1.4485175000000003 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="355.4697715231679,217.36125319394677 568.0431373390173,429.93461900979617" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
157
+ <polyline data-points="3.5005768910000006,1.4485175000000003 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="561.4451991796051,217.7459158862381 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
158
158
  </g>
159
159
  <g>
160
- <polyline data-points="-2.4994231089999994,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="142.8964057073185,429.93461900979617 568.0431373390173,429.93461900979617" fill="none" stroke="hsl(342, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
160
+ <polyline data-points="0.5005768910000006,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="351.527953333535,427.6631617323082 561.4451991796051,427.6631617323082" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
161
161
  </g>
162
162
  <g>
163
- <polyline data-points="3.5005768910000006,1.4485175000000003 0.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="568.0431373390173,217.36125319394677 355.4697715231679,429.93461900979617" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
163
+ <polyline data-points="-3.5005768910000006,1.4489565000000004 -3.7005768910000008,1.4489565000000004 -3.7005768910000008,1.0753815000000009 -0.7005768910000008,1.0753815000000009 -0.7005768910000008,1.4489565000000004 -0.5005768910000006,1.4489565000000004" data-type="line" data-label="" points="71.55755929219254,217.7151979959293 57.56307623578783,217.7151979959293 57.56307623578783,243.85514303491112 267.48032208185793,243.85514303491112 267.48032208185793,217.7151979959293 281.47480513826264,217.7151979959293" fill="none" stroke="purple" stroke-width="1" />
164
164
  </g>
165
165
  <g>
166
- <polyline data-points="3.5005768910000006,1.4485175000000003 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="568.0431373390173,217.36125319394677 568.0431373390173,429.93461900979617" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
166
+ <polyline data-points="-3.5005768910000006,-1.5510434999999996 -3.7005768910000008,-1.5510434999999996 -3.7005768910000008,-1.9246184999999991 -0.7005768910000008,-1.9246184999999991 -0.7005768910000008,-1.5510434999999996 -0.5005768910000006,-1.5510434999999996" data-type="line" data-label="" points="71.55755929219254,427.63244384199936 57.56307623578783,427.63244384199936 57.56307623578783,453.7723888809812 267.48032208185793,453.7723888809812 267.48032208185793,427.63244384199936 281.47480513826264,427.63244384199936" fill="none" stroke="purple" stroke-width="1" />
167
167
  </g>
168
168
  <g>
169
- <polyline data-points="0.5005768910000006,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="355.4697715231679,429.93461900979617 568.0431373390173,429.93461900979617" fill="none" stroke="hsl(343, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
169
+ <polyline data-points="3.5005768910000006,1.4485175000000003 4.051576891000001,1.4485175000000003 4.051576891000001,-1.7514824999999998 3.7005768910000008,-1.7514824999999998 3.7005768910000008,-1.5514824999999997 3.5005768910000006,-1.5514824999999997" data-type="line" data-label="" points="561.4451991796051,217.7459158862381 600,217.7459158862381 600,441.6576447887129 575.4396822360097,441.6576447887129 575.4396822360097,427.6631617323082 561.4451991796051,427.6631617323082" fill="none" stroke="purple" stroke-width="1" />
170
170
  </g>
171
171
  <g>
172
- <rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="1.5" x="71.9568626609827" y="197.79734690223955" width="70.93954304633581" height="31.831940379671494" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014112774610714288" />
172
+ <rect data-type="rect" data-label="schematic_component_0" data-x="-3" data-y="1.5" x="71.55755929219254" y="198.42646205445624" width="70.05314819527237" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
173
173
  </g>
174
174
  <g>
175
- <rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="1.5" x="284.5302284768321" y="197.79734690223955" width="70.93954304633576" height="31.831940379671494" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014112774610714288" />
175
+ <rect data-type="rect" data-label="schematic_component_1" data-x="0" data-y="1.5" x="281.47480513826264" y="198.42646205445624" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
176
176
  </g>
177
177
  <g>
178
- <rect data-type="rect" data-label="schematic_component_2" data-x="3" data-y="1.5" x="497.10359429268146" y="197.79734690223955" width="70.93954304633587" height="31.831940379671494" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014112774610714288" />
178
+ <rect data-type="rect" data-label="schematic_component_2" data-x="3" data-y="1.5" x="491.39205098433274" y="198.42646205445624" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
179
179
  </g>
180
180
  <g>
181
- <rect data-type="rect" data-label="schematic_component_3" data-x="-3" data-y="-1.5" x="71.9568626609827" y="410.37071271808895" width="70.93954304633581" height="31.831940379671494" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014112774610714288" />
181
+ <rect data-type="rect" data-label="schematic_component_3" data-x="-3" data-y="-1.5" x="71.55755929219254" y="408.34370790052634" width="70.05314819527237" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
182
182
  </g>
183
183
  <g>
184
- <rect data-type="rect" data-label="schematic_component_4" data-x="0" data-y="-1.5" x="284.5302284768321" y="410.37071271808895" width="70.93954304633576" height="31.831940379671494" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014112774610714288" />
184
+ <rect data-type="rect" data-label="schematic_component_4" data-x="0" data-y="-1.5" x="281.47480513826264" y="408.34370790052634" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
185
185
  </g>
186
186
  <g>
187
- <rect data-type="rect" data-label="schematic_component_5" data-x="3" data-y="-1.5" x="497.10359429268146" y="410.37071271808895" width="70.93954304633587" height="31.831940379671494" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014112774610714288" />
187
+ <rect data-type="rect" data-label="schematic_component_5" data-x="3" data-y="-1.5" x="491.39205098433274" y="408.34370790052634" width="70.05314819527234" height="31.43419792405024" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.014291346039285717" />
188
188
  </g>
189
189
  <g>
190
- <rect data-type="rect" data-label="" data-x="-3.7265768910000006" data-y="1.4489565000000004" x="40" y="210.24436776422073" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
190
+ <rect data-type="rect" data-label="" data-x="-3.7005768910000008" data-y="1.6739565000000005" x="50.56583470758551" y="186.22761111901877" width="13.994483056404675" height="31.487586876910513" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
191
191
  </g>
192
192
  <g>
193
- <rect data-type="rect" data-label="" data-x="-0.7265768910000006" data-y="1.4489565000000004" x="252.5733658158494" y="210.24436776422073" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
193
+ <rect data-type="rect" data-label="" data-x="2.2734231089999994" data-y="1.4489565000000004" x="459.8344916921402" y="210.71795646772694" width="31.487586876910484" height="13.994483056404704" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
194
194
  </g>
195
195
  <g>
196
- <rect data-type="rect" data-label="" data-x="2.2734231089999994" data-y="1.4489565000000004" x="465.1467316316988" y="210.24436776422073" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
196
+ <rect data-type="rect" data-label="" data-x="-3.7265768910000006" data-y="1.4489565000000004" x="40" y="210.71795646772694" width="31.487586876910513" height="13.994483056404704" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
197
197
  </g>
198
198
  <g>
199
- <rect data-type="rect" data-label="" data-x="-3.7265768910000006" data-y="1.4489565000000004" x="40" y="210.24436776422073" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
199
+ <rect data-type="rect" data-label="" data-x="-3.7005768910000008" data-y="-1.3260434999999995" x="50.56583470758551" y="396.1448569650889" width="13.994483056404675" height="31.487586876910484" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
200
200
  </g>
201
201
  <g>
202
- <rect data-type="rect" data-label="" data-x="-3.7265768910000006" data-y="-1.5510434999999996" x="40" y="422.8177335800701" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
202
+ <rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="1.4485175000000003" x="351.59792574881703" y="210.74867435803577" width="31.487586876910484" height="13.994483056404675" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
203
203
  </g>
204
204
  <g>
205
- <rect data-type="rect" data-label="" data-x="-0.7265768910000006" data-y="-1.5510434999999996" x="252.5733658158494" y="422.8177335800701" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
205
+ <rect data-type="rect" data-label="" data-x="-2.2734231089999994" data-y="-1.5514824999999997" x="141.68067990274693" y="420.6659202041059" width="31.487586876910513" height="13.994483056404647" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
206
206
  </g>
207
207
  <g>
208
- <rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="1.4485175000000003" x="355.54062931177316" y="210.27547433341846" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
208
+ <rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="-1.5514824999999997" x="561.5151715948871" y="420.6659202041059" width="31.48758687691054" height="13.994483056404647" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
209
209
  </g>
210
210
  <g>
211
- <rect data-type="rect" data-label="" data-x="-2.2734231089999994" data-y="-1.5514824999999997" x="142.96726349592376" y="422.84884014926786" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
211
+ <rect data-type="rect" data-label="" data-x="3.7760768910000007" data-y="1.6735175000000004" x="573.7253580616002" y="186.25832900932758" width="13.994483056404647" height="31.487586876910513" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
212
212
  </g>
213
213
  <g>
214
- <rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="-1.5514824999999997" x="568.1139951276225" y="422.84884014926786" width="31.886004872377498" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
215
- </g>
216
- <g>
217
- <rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="1.4485175000000003" x="568.1139951276225" y="210.27547433341846" width="31.886004872377498" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
218
- </g>
219
- <g>
220
- <rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="-1.5514824999999997" x="355.54062931177316" y="422.84884014926786" width="31.88600487237744" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
221
- </g>
222
- <g>
223
- <rect data-type="rect" data-label="" data-x="3.7265768910000006" data-y="-1.5514824999999997" x="568.1139951276225" y="422.84884014926786" width="31.886004872377498" height="14.171557721056615" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014112774610714288" />
214
+ <rect data-type="rect" data-label="" data-x="0.7265768910000006" data-y="-1.5514824999999997" x="351.59792574881703" y="420.6659202041059" width="31.487586876910484" height="13.994483056404647" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.014291346039285717" />
224
215
  </g>
225
216
  <g id="crosshair" style="display: none">
226
217
  <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
@@ -250,12 +241,12 @@ x+" data-x="3.5005768910000006" data-y="-1.5514824999999997" cx="568.04313733901
250
241
 
251
242
  // Calculate real coordinates using inverse transformation
252
243
  const matrix = {
253
- "a": 70.85778860528313,
244
+ "a": 69.97241528202336,
254
245
  "c": 0,
255
- "e": 320,
246
+ "e": 316.5013792358988,
256
247
  "b": 0,
257
- "d": -70.85778860528313,
258
- "f": 320
248
+ "d": -69.97241528202336,
249
+ "f": 319.1021839395164
259
250
  };
260
251
  // Manually invert and apply the affine transform
261
252
  // Since we only use translate and scale, we can directly compute:
@@ -2,78 +2,72 @@
2
2
  <rect width="100%" height="100%" fill="white" />
3
3
  <g>
4
4
  <circle data-type="point" data-label="Q1_NPN.1
5
- y-" data-x="-2.2855604555" data-y="-0.5519250999999993" cx="49.983280260645415" cy="365.6995529759246" r="3" fill="hsl(256, 100%, 50%, 0.8)" />
5
+ y-" data-x="-2.2855604555" data-y="-0.5519250999999993" cx="75.52953054163507" cy="363.57697710476646" r="3" fill="hsl(256, 100%, 50%, 0.8)" />
6
6
  </g>
7
7
  <g>
8
8
  <circle data-type="point" data-label="Q1_NPN.2
9
- y+" data-x="-2.2855604555000015" data-y="0.5519250999999993" cx="49.9832802606453" cy="274.3004470240754" r="3" fill="hsl(257, 100%, 50%, 0.8)" />
9
+ y+" data-x="-2.2855604555000015" data-y="0.5519250999999993" cx="75.52953054163495" cy="276.42302289523354" r="3" fill="hsl(257, 100%, 50%, 0.8)" />
10
10
  </g>
11
11
  <g>
12
12
  <circle data-type="point" data-label="Q1_NPN.3
13
- x+" data-x="-1.5938689350000006" data-y="0.004526300000001031" cx="107.2555320282994" cy="319.6252210913492" r="3" fill="hsl(258, 100%, 50%, 0.8)" />
13
+ x+" data-x="-1.5938689350000006" data-y="0.004526300000001031" cx="130.1416972149565" cy="319.6426281909097" r="3" fill="hsl(258, 100%, 50%, 0.8)" />
14
14
  </g>
15
15
  <g>
16
16
  <circle data-type="point" data-label="Q2_PNP.1
17
- y-" data-x="3.2144395445" data-y="-0.5519250999999993" cx="505.38482182413946" cy="365.6995529759246" r="3" fill="hsl(79, 100%, 50%, 0.8)" />
17
+ y-" data-x="3.2144395445" data-y="-0.5519250999999993" cx="509.7793482727289" cy="363.57697710476646" r="3" fill="hsl(79, 100%, 50%, 0.8)" />
18
18
  </g>
19
19
  <g>
20
20
  <circle data-type="point" data-label="Q2_PNP.2
21
- y+" data-x="3.2144395444999985" data-y="0.5519250999999993" cx="505.38482182413935" cy="274.3004470240754" r="3" fill="hsl(80, 100%, 50%, 0.8)" />
21
+ y+" data-x="3.2144395444999985" data-y="0.5519250999999993" cx="509.7793482727288" cy="276.42302289523354" r="3" fill="hsl(80, 100%, 50%, 0.8)" />
22
22
  </g>
23
23
  <g>
24
24
  <circle data-type="point" data-label="Q2_PNP.3
25
- x+" data-x="3.9061310649999994" data-y="0.004526300000001031" cx="562.6570735917935" cy="319.6252210913492" r="3" fill="hsl(81, 100%, 50%, 0.8)" />
25
+ x+" data-x="3.9061310649999994" data-y="0.004526300000001031" cx="564.3915149460504" cy="319.6426281909097" r="3" fill="hsl(81, 100%, 50%, 0.8)" />
26
26
  </g>
27
27
  <g>
28
- <circle data-type="point" data-label="" data-x="-2.2855604555" data-y="-0.5519250999999993" cx="49.983280260645415" cy="365.6995529759246" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
28
+ <circle data-type="point" data-label="" data-x="-2.2855604555" data-y="-0.6519250999999994" cx="75.52953054163507" cy="371.4724283362409" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
29
29
  </g>
30
30
  <g>
31
- <circle data-type="point" data-label="" data-x="3.2144395445" data-y="-0.5519250999999993" cx="505.38482182413946" cy="365.6995529759246" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
31
+ <circle data-type="point" data-label="" data-x="-2.2855604555000015" data-y="0.6519250999999994" cx="75.52953054163495" cy="268.5275716637591" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
32
32
  </g>
33
33
  <g>
34
- <circle data-type="point" data-label="" data-x="-2.2855604555000015" data-y="0.5519250999999993" cx="49.9832802606453" cy="274.3004470240754" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
34
+ <circle data-type="point" data-label="" data-x="-1.5938689350000006" data-y="0.004526300000001031" cx="130.1416972149565" cy="319.6426281909097" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
35
35
  </g>
36
36
  <g>
37
- <circle data-type="point" data-label="" data-x="3.2144395444999985" data-y="0.5519250999999993" cx="505.38482182413935" cy="274.3004470240754" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
37
+ <circle data-type="point" data-label="" data-x="3.9061310649999994" data-y="0.004526300000001031" cx="564.3915149460504" cy="319.6426281909097" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
38
38
  </g>
39
39
  <g>
40
- <circle data-type="point" data-label="" data-x="-1.5938689350000006" data-y="0.004526300000001031" cx="107.2555320282994" cy="319.6252210913492" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
40
+ <polyline data-points="-2.2855604555,-0.5519250999999993 3.2144395445,-0.5519250999999993" data-type="line" data-label="" points="75.52953054163507,363.57697710476646 509.7793482727289,363.57697710476646" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
41
41
  </g>
42
42
  <g>
43
- <circle data-type="point" data-label="" data-x="3.9061310649999994" data-y="0.004526300000001031" cx="562.6570735917935" cy="319.6252210913492" r="3" fill="hsl(40, 100%, 50%, 0.9)" />
43
+ <polyline data-points="-2.2855604555000015,0.5519250999999993 3.2144395444999985,0.5519250999999993" data-type="line" data-label="" points="75.52953054163495,276.42302289523354 509.7793482727288,276.42302289523354" fill="none" stroke="hsl(102, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
44
44
  </g>
45
45
  <g>
46
- <polyline data-points="-2.2855604555,-0.5519250999999993 3.2144395445,-0.5519250999999993" data-type="line" data-label="" points="49.983280260645415,365.6995529759246 505.38482182413946,365.6995529759246" fill="none" stroke="hsl(157, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
46
+ <polyline data-points="-1.5938689350000006,0.004526300000001031 3.9061310649999994,0.004526300000001031" data-type="line" data-label="" points="130.1416972149565,319.6426281909097 564.3915149460504,319.6426281909097" fill="none" stroke="hsl(321, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
47
47
  </g>
48
48
  <g>
49
- <polyline data-points="-2.2855604555000015,0.5519250999999993 3.2144395444999985,0.5519250999999993" data-type="line" data-label="" points="49.9832802606453,274.3004470240754 505.38482182413935,274.3004470240754" fill="none" stroke="hsl(102, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
49
+ <polyline data-points="-2.2855604555,-0.5519250999999993 -2.2855604555,-0.7519250999999995 3.2144395445,-0.7519250999999995 3.2144395445,-0.5519250999999993" data-type="line" data-label="" points="75.52953054163507,363.57697710476646 75.52953054163507,379.3678795677153 509.7793482727289,379.3678795677153 509.7793482727289,363.57697710476646" fill="none" stroke="purple" stroke-width="1" />
50
50
  </g>
51
51
  <g>
52
- <polyline data-points="-1.5938689350000006,0.004526300000001031 3.9061310649999994,0.004526300000001031" data-type="line" data-label="" points="107.2555320282994,319.6252210913492 562.6570735917935,319.6252210913492" fill="none" stroke="hsl(321, 100%, 50%, 0.8)" stroke-width="1" stroke-dasharray="4 2" />
52
+ <polyline data-points="-2.2855604555000015,0.5519250999999993 -2.2855604555000015,0.7519250999999995 3.2144395444999985,0.7519250999999995 3.2144395444999985,0.5519250999999993" data-type="line" data-label="" points="75.52953054163495,276.42302289523354 75.52953054163495,260.6321204322847 509.7793482727288,260.6321204322847 509.7793482727288,276.42302289523354" fill="none" stroke="purple" stroke-width="1" />
53
53
  </g>
54
54
  <g>
55
- <rect data-type="rect" data-label="schematic_component_0" data-x="-2" data-y="0" x="40" y="274.3004470240754" width="67.2555320282994" height="91.39910595184915" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.012077253803571426" />
55
+ <rect data-type="rect" data-label="schematic_component_0" data-x="-2" data-y="0" x="66.00993686907114" y="276.42302289523354" width="64.13176034588537" height="87.15395420953291" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01266552057232143" />
56
56
  </g>
57
57
  <g>
58
- <rect data-type="rect" data-label="schematic_component_1" data-x="3.5" data-y="0" x="495.4015415634941" y="274.3004470240754" width="67.2555320282994" height="91.39910595184915" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.012077253803571426" />
58
+ <rect data-type="rect" data-label="schematic_component_1" data-x="3.5" data-y="0" x="500.25975460016497" y="276.42302289523354" width="64.13176034588543" height="87.15395420953291" fill="hsl(24, 100%, 50%, 0.8)" stroke="black" stroke-width="0.01266552057232143" />
59
59
  </g>
60
60
  <g>
61
- <rect data-type="rect" data-label="" data-x="-2.2855604555" data-y="-0.7779250999999993" x="41.70325223221823" y="365.78235325620886" width="16.560056056854336" height="37.26012612792226" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.012077253803571426" />
61
+ <rect data-type="rect" data-label="" data-x="-2.5105604555000003" data-y="-0.6519250999999994" x="40.000000000000085" y="363.57697710476646" width="35.52953054163498" height="15.79090246294885" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01266552057232143" />
62
62
  </g>
63
63
  <g>
64
- <rect data-type="rect" data-label="" data-x="3.2144395445" data-y="-0.7779250999999993" x="497.1047937957123" y="365.78235325620886" width="16.56005605685442" height="37.26012612792226" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.012077253803571426" />
64
+ <rect data-type="rect" data-label="" data-x="-2.5105604555000016" data-y="0.6519250999999994" x="40" y="260.6321204322847" width="35.529530541634955" height="15.79090246294885" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01266552057232143" />
65
65
  </g>
66
66
  <g>
67
- <rect data-type="rect" data-label="" data-x="-2.2855604555000015" data-y="0.7779250999999993" x="41.70325223221812" y="236.95752061586887" width="16.560056056854336" height="37.26012612792226" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.012077253803571426" />
67
+ <rect data-type="rect" data-label="" data-x="-1.3678689350000006" data-y="0.004526300000001031" x="130.22065172727125" y="311.74717695943525" width="35.529530541634955" height="15.79090246294885" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01266552057232143" />
68
68
  </g>
69
69
  <g>
70
- <rect data-type="rect" data-label="" data-x="3.2144395444999985" data-y="0.7779250999999993" x="497.10479379571217" y="236.95752061586887" width="16.560056056854307" height="37.26012612792226" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.012077253803571426" />
71
- </g>
72
- <g>
73
- <rect data-type="rect" data-label="" data-x="-1.3678689350000006" data-y="0.004526300000001031" x="107.33833230858366" y="311.345193062922" width="37.26012612792226" height="16.560056056854364" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.012077253803571426" />
74
- </g>
75
- <g>
76
- <rect data-type="rect" data-label="" data-x="4.132131064999999" data-y="0.004526300000001031" x="562.7398738720777" y="311.345193062922" width="37.26012612792226" height="16.560056056854364" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.012077253803571426" />
70
+ <rect data-type="rect" data-label="" data-x="4.132131064999999" data-y="0.004526300000001031" x="564.4704694583651" y="311.74717695943525" width="35.52953054163493" height="15.79090246294885" fill="hsl(40, 100%, 50%, 0.35)" stroke="black" stroke-width="0.01266552057232143" />
77
71
  </g>
78
72
  <g id="crosshair" style="display: none">
79
73
  <line id="crosshair-h" y1="0" y2="640" stroke="#666" stroke-width="0.5" />
@@ -103,11 +97,11 @@ x+" data-x="3.9061310649999994" data-y="0.004526300000001031" cx="562.6570735917
103
97
 
104
98
  // Calculate real coordinates using inverse transformation
105
99
  const matrix = {
106
- "a": 82.80028028427165,
100
+ "a": 78.95451231474433,
107
101
  "c": 0,
108
- "e": 239.228326582693,
102
+ "e": 255.9848416715025,
109
103
  "b": 0,
110
- "d": -82.80028028427165,
104
+ "d": -78.95451231474433,
111
105
  "f": 320
112
106
  };
113
107
  // Manually invert and apply the affine transform