Compare commits

...

6 Commits

Author SHA1 Message Date
Dominic Zimmer
562e2ea9dc Merge branch 'master' of leafbla.de:dominic/ResistorJS 2020-11-19 00:17:41 +01:00
Dominic Zimmer
7644a5cf30 Fix bug not collapsing NestedResistors 2020-11-19 00:17:39 +01:00
215eb20a55 Update 'README.md' 2020-11-18 18:13:36 +01:00
7364b2c4c5 Update 'README.md' 2020-11-18 18:01:42 +01:00
Dominic Zimmer
32e10a3cf4 Merge branch 'master' of leafbla.de:dominic/ResistorJS 2020-11-18 17:58:37 +01:00
Dominic Zimmer
6facbd4c93 Export Symbols 2020-11-18 17:54:39 +01:00
5 changed files with 22 additions and 9 deletions

View File

@@ -3,18 +3,29 @@ ResistorJS is a Javascript library intended to compose electronical resistors.
## Using Resistors in Code
In order to instantiate an 100 Ohm resistor, we simply call `new Resistor(100)`. In order to compose several resistors, the composite resistor types `SeriesResistor` and `ParallelResistor` are available.
```
```JS
var r1 = new Resistor(100);
var r2 = new Resistor(150);
// Combining resistors
var inSeries = r1.series(r2); // type: SeriesResistor
var inParallel = r1.parallel(r2); // type: ParallelResistor
// Computing resulting resistors
inSeries.getOhmage() // 250
inParallel.getOhmage() // 60
// Drawing to DOM
r1.draw(div1);
r2.draw(div2);
inSeries.draw(div3);
inParallel.draw(div4);
```
Calling `Resistor.draw(element)` generates an SVG from the constructed Resistor object. Above code would render something like this:
Calling `Resistor.draw(element)` generates an SVG from the constructed Resistor object. Above code will render something like this:
![Your browser cannot display images :(](imgs/tutorial.png)
## Computing approximations
Sometimes, one wants to use ohmages in an electronical circuit that simply are not available. By cleverly combining a sufficient number of available resistors, one can approximate the needed values. For instance, using only 100Ohm and 100Ohm resistors, one can construct a (sufficiently close to) 127Ohm resistor like so:
![Your browser can still not display images :(](imgs/127ohm.png)
`main.js` contains an example application using dynamic programming that computes sufficiently good approximations for resistor values within a set range.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

BIN
imgs/tutorial.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

View File

@@ -1,5 +1,9 @@
import { Resistor, SeriesResistor, ParallelResistor } from './modules/resistors.js';
window.Resistor = Resistor
window.SeriesResistor = SeriesResistor
window.ParallelResistor = ParallelResistor
var resistorValues = [100, 1000]
var N = 4
var maxValue = Math.max(...resistorValues)
@@ -41,6 +45,7 @@ console.log(`Parameters: N = ${N}, values = ${resistorValues} `);
for (i = 0; i < N; i++)
bottomUpDP();
console.log("Finished computation of DP array");
window.numberline = numberline
function missings() {
var missing = new Set()
@@ -52,6 +57,3 @@ function missings() {
}
console.log(`We found a composite resistor for every value in the range [1, ${N * maxValue + 1}] but for: ${[...missings()].join(",")}`)
numberline[420].draw() // Draw the Resistor diagram for 420 Ohm as SVG
console.log(numberline)

View File

@@ -35,7 +35,7 @@ class Resistor {
var [width, height] = [50, 100]
return [svg, width, height]
}
draw() {
draw(element = document.getElementsByTagName("body")[0]) {
var [svg, width, height] = this.getSVG();
var maxHeight = height + 2*25
var maxWidth = width
@@ -47,7 +47,7 @@ class Resistor {
${svg}
</g>
</svg>`
document.getElementsByTagName("body")[0].innerHTML = thesvg;
element.innerHTML = thesvg;
}
}
@@ -57,7 +57,7 @@ class NestedResistor extends Resistor {
constructor(l, func, instance) {
super(func(l.map(e => e.getOhmage())));
this.func = func
this.children = flatten(l, instance.constructor.name);
this.children = flatten(l, instance);
}
cost() {
return sum(this.children.map(e => e.cost()));