Anpassad Enhetsomvandlare
Anpassade Enheter: Modellering, Formler och Bästa Praxis
Definiera dina egna mätenheter förankrade till en 'Basenhet' eller en annan anpassad enhet. Modellera linjära faktorer eller fullständiga uttryck, och organisera konsekventa familjer för ditt projekt eller domän.
Grundläggande Koncept
Referensbaserad Modellering
Din referens är en annan anpassad enhet eller 'Basenhet'.
Omvandlingsuttrycket mappar inmatade värden till referensenhetens rymd (systemet är avsiktligt enhetsagnostiskt).
- DimensionssäkerhetGenom att välja en referens binder du implicit den anpassade enheten till den familjen. Håll familjer konsekventa (t.ex. relaterade enheter som refererar till samma bas).
- KomponerbarhetÄndra referensen senare utan att döpa om enheten – endast uttrycket behöver justeras.
- GranskningsbarhetVarje enhet har en enda, tydlig definition: referens + uttryck.
Faktor vs Uttryck
Enkla enheter använder en konstant faktor (t.ex. 1 foo = 0.3048 × Bas).
Avancerade enheter kan använda uttryck med funktioner (t.ex. 10 * log(x / 1e-3)).
- Konstanta FaktorerBäst för fasta linjära förhållanden (längdskalor, areaförhållanden, etc.).
- UttryckAnvänd matematiska funktioner för härledda eller icke-linjära skalor (förhållanden, logaritmer, potenser).
- KonstanterInbyggda konstanter som PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN.
Namngivning, Symboler och Konsekvens
Välj korta, entydiga symboler. Undvik kollisioner med befintliga standarder.
Dokumentera avsikten i din organisation – vad den mäter och varför den existerar.
- TydlighetFöredra koncisa symboler (1–4 tecken rekommenderas; UI tillåter upp till 6).
- StabilitetBehandla symboler som stabila identifierare över datamängder och API:er.
- StilAnvänd SI-liknande skiftlägesanvändning där det är meningsfullt (t.ex. 'foo', 'kFoo', 'mFoo').
- En anpassad enhet = referensenhet + omvandlingsuttryck.
- Referensen förankrar dimensionen; uttrycket definierar värdemappningen.
- Föredra konstanta faktorer för linjära skalor; använd uttryck för specialfall.
Formelspråk
Uttryck stöder tal, variabeln x (inmatningsvärde), aliasvärde, konstanter (PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN), aritmetiska operatorer och vanliga matematiska funktioner. Uttryck utvärderas till ett värde i den valda referensenheten.
Operatorer
| Operator | Betydelse | Exempel |
|---|---|---|
| + | Addition | x + 2 |
| - | Subtraktion/Unär Negation | x - 5, -x |
| * | Multiplikation | 2 * x |
| / | Division | x / 3 |
| ** | Potens (använd **; ^ konverteras automatiskt) | x ** 2 |
| () | Prioritet | (x + 1) * 2 |
Funktioner
| Funktion | Signatur | Exempel |
|---|---|---|
| sqrt | sqrt(x) | sqrt(x^2 + 1) |
| cbrt | cbrt(x) | cbrt(x) |
| pow | pow(a, b) | pow(0.3048, 2) |
| abs | abs(x) | abs(x) |
| min | min(a, b) | min(x, 100) |
| max | max(a, b) | max(x, 0) |
| round | round(x) | round(x * 1000) / 1000 |
| trunc | trunc(x) | trunc(x) |
| floor | floor(x) | floor(x) |
| ceil | ceil(x) | ceil(x) |
| sin | sin(x) | sin(PI/6) |
| cos | cos(x) | cos(PI/3) |
| tan | tan(x) | tan(PI/8) |
| asin | asin(x) | asin(0.5) |
| acos | acos(x) | acos(0.5) |
| atan | atan(x) | atan(1) |
| atan2 | atan2(y, x) | atan2(1, x) |
| sinh | sinh(x) | sinh(1) |
| cosh | cosh(x) | cosh(1) |
| tanh | tanh(x) | tanh(1) |
| ln | ln(x) | ln(x) |
| log | log(x) | log(100) |
| log2 | log2(x) | log2(8) |
| exp | exp(x) | exp(1) |
| degrees | degrees(x) | degrees(PI/2) |
| radians | radians(x) | radians(180) |
| percent | percent(value, total) | percent(25, 100) |
| factorial | factorial(n) | factorial(5) |
| gcd | gcd(a, b) | gcd(12, 8) |
| lcm | lcm(a, b) | lcm(12, 8) |
| clamp | clamp(value, min, max) | clamp(x, 0, 100) |
| sign | sign(x) | sign(-5) |
| nthRoot | nthRoot(value, n) | nthRoot(8, 3) |
Uttrycksregler
- x är inmatningsvärdet; aliasvärde är också tillgängligt.
- Använd explicit multiplikation (t.ex. 2 * PI, inte 2PI).
- Tillgängliga konstanter: PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN.
- Vinklar för trigonometriska funktioner är i radianer (använd hjälpfunktionerna degrees() och radians() för omvandling).
- Referera till andra anpassade enheter med namn (snake_case) eller symbol; deras nuvarande toBase-värden injiceras som konstanter.
- Använd ** för potenser (motorn konverterar automatiskt ^ till **).
- Smart inmatningsnormalisering: ×, ÷, π, ², ³ konverteras automatiskt till *, /, PI, ^2, ^3.
- Tillgängliga hjälpfunktioner: degrees(), radians(), percent(), factorial(), gcd(), lcm(), clamp(), sign(), nthRoot().
- Förbättrad feldetektering förhindrar vanliga misstag (logaritmen av negativa tal, kvadratroten av negativa tal, division med noll).
- Referens till anpassad enhet: Använd andra enheter som variabler i uttryck (t.ex. 'x * A' där A är en annan anpassad enhet).
- Blanksteg ignoreras; använd parenteser för att styra prioritet.
- Uttryck måste producera ett ändligt numeriskt resultat för giltiga indata.
- Använd explicit multiplikation (t.ex. 2 * PI).
- Vinklar för trigonometriska funktioner är i radianer.
- log(x) är bas 10; ln(x) är naturlig logaritm (bas e).
Dimensionsanalys & Strategier
Detta anpassade system är enhetsagnostiskt. Modellera familjer genom att förankra relaterade enheter till samma 'Basenhet' (eller en delad referens). Håll betydelsen konsekvent över den familj du designar.
Modelleringsstrategier
| Strategi | När den ska användas | Anteckningar |
|---|---|---|
| Direkt Faktor | Linjära förhållanden (t.ex. 1 foo = k × Bas). | Använd ett konstant tal (inget x). Stabilt och exakt. |
| Potensskalning | Härledd från en basskala (k^2, k^3). | Använd pow(k, n) där k är basskalan. |
| Förhållande eller Normalisering | Enheter definierade i förhållande till en referensnivå (t.ex. x / ref). | Användbart för indexliknande mått; håll ref explicit i uttrycket. |
| Logaritmisk Skala | Perceptuella eller effektförhållandesskalor (t.ex. dB-stil 10 * log(x/ref)). | Se till att domänen är positiv; dokumentera referensvärdet. |
| Affin Avbildning | Sällsynta fall med förskjutningar (a * x + b). | Förskjutningar ändrar nollpunkter – tillämpa endast när det är konceptuellt motiverat. |
Redigerare & Validering
Skapa enheter med ett namn, symbol (upp till 6 tecken), färgtagg, en referens (Basenhet eller en annan anpassad enhet) och en faktor/uttryck. Redigeraren validerar formler i realtid med förbättrad feldetektering och förhindrar cirkulära referenser.
- Referensalternativ inkluderar 'Basenhet' och befintliga anpassade enheter. Osäkra alternativ som skulle skapa cykler filtreras bort automatiskt.
- Variabler: använd x (eller value) för inmatningsvärdet. Referera till andra anpassade enheter med snake_case-namn eller med symbol; deras nuvarande toBase-värden injiceras som konstanter.
- Stödda konstanter: PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN.
- Kärnfunktioner: sqrt, cbrt, pow, abs, min, max, round, trunc, floor, ceil, sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh, ln, log, log2, exp.
- Hjälpfunktioner: degrees(), radians(), percent(), factorial(), gcd(), lcm(), clamp(), sign(), nthRoot() för förbättrad användarupplevelse.
- Operatorer: +, -, *, /, ** för potens. Smart inmatningsnormalisering: ×, ÷, π, ², ³ konverteras automatiskt.
- Realtidsvalidering med förhandsgranskning (t.ex. 10 x → resultat), klassificering av komplexitet (enkel/måttlig/komplex) och kontextmedvetna förslag.
- Förbättrad feldetektering fångar vanliga misstag: logaritmer av icke-positiva tal, kvadratrötter av negativa tal, division med noll.
- Avancerad cykeldetektering förhindrar att enheter är beroende av sig själva (direkt eller indirekt) med tydliga felmeddelanden.
- Interaktiv hjälppanel med kategoriserade exempel, klickbara formelfragment och knappar för anpassade enheter för enkel infogning.
Bästa Praxis
- Föredra en konstant faktor om möjligt; uttryck endast när det är nödvändigt.
- Välj en referensenhet som är stabil, allmänt förstådd och osannolik att ändras.
- Undvik cirkulära kedjor av referenser; håll grafer acykliska.
- Lägg till exempelvärden och korskolla med oberoende kalkylatorer eller kända identiteter.
- Håll symboler korta, unika och dokumenterade för din organisation.
- Om du använder logaritmer, registrera referensvärdet, basen och den avsedda domänen för x.
- Testa med 3–5 representativa värden och verifiera omvandlingar fram och tillbaka.
- Undvik cirkulära referenser; välj en stabil referensenhet.
- Dokumentera antaganden (domäner, förskjutningar, typiska intervall).
Startmallar & Exempel
Dessa exempel illustrerar vanliga modelleringsmönster i detta system som endast är för anpassade enheter. Ersätt konstanter och referenser med dina behov.
| Namn | Formel | Referens | Anteckningar |
|---|---|---|---|
| Basskalad Enhet (foo) | 0.3048 | Basenhet | Definierar 1 foo = 0.3048 × Bas (enkel linjär faktor). |
| Potensskalad (foo²) | pow(0.3048, 2) | Basenhet | Härledd från en basskala (k^2). |
| Volymskalad (foo³) | pow(0.3048, 3) | Basenhet | Härledd från en basskala (k^3). |
| Index från Referens | x / 42 | Basenhet | Normalisera med en fast nivå (domän x > 0). |
| Effektförhållande (dB-stil) | 10 * log(x / 0.001) | Basenhet | Logaritmiskt mått relativt 1 mW (exempel). Se till att x > 0. |
| Geometrisk Faktor | 2 * PI * 0.5 | Basenhet | Exempel på konstanter och multiplikation. |
| Referera till Annan Anpassad Enhet | A * 2 | Anpassad Enhet A | Använd en annan enhets symbol/namn som en konstant i uttryck. |
| Komplex Enhetsrelation | sqrt(x^2 + base_length^2) | Basenhet | Pythagoreisk relation som använder den anpassade enheten 'base_length' som en konstant. |
| Skalad Enhet med Förskjutning | x * scale_factor + offset_unit | Basenhet | Linjär transformation som använder två andra anpassade enheter som konstanter. |
| Procent av Referensenhet | percent(x, reference_value) | Basenhet | Uttryck indata som procent av en annan anpassad enhet med hjälp av hjälpfunktion. |
| Begränsat Enhetsintervall | clamp(x * multiplier, min_unit, max_unit) | Basenhet | Begränsa värden mellan två anpassade enhetskonstanter med hjälp av clamp-hjälpfunktionen. |
| Enhetsförhållande med GCD | x / gcd(x, common_divisor) | Basenhet | Matematisk relation som använder GCD-hjälpfunktionen med en anpassad enhetskonstant. |
| Kedja för Vinkelomvandling | degrees(x * PI / reference_angle) | Anpassad Vinkelenhet | Konvertera till grader med en anpassad vinkelenhet och hjälpfunktionen degrees(). |
Styrning & Samarbete
- Upprätthåll en katalog över godkända anpassade enheter med ägare och granskningsdatum.
- Använd versionshantering när definitioner utvecklas; undvik brytande ändringar av symboler.
- Registrera härkomst för konstanter och referenser (standarder, litteratur, interna dokument).
- Automatisera valideringstester (intervallkontroller, exempelomvandlingar, monotonicitet).
Vanliga Frågor
Ska jag använda en konstant faktor eller ett uttryck?
Föredra en konstant faktor när förhållandet är linjärt och fast. Använd uttryck endast när mappningen beror på x eller kräver funktioner (potenser, logaritmer, trigonometri).
Hur väljer jag en referensenhet?
Välj en stabil, allmänt förstådd enhet som fångar den dimension du avser (t.ex. meter för längd, m² för area). Referensen förankrar den dimensionella betydelsen.
Är vinklar i grader eller radianer?
Radianer. Konvertera grader genom att multiplicera med PI/180 innan du använder trigonometriska funktioner.
Kan jag kedja anpassade enheter?
Ja, men undvik cykler. Håll grafen acyklisk och dokumentera kedjan för att bevara tydligheten.
Komplett Verktygskatalog
Alla 71 verktyg tillgängliga på UNITS