From 9359ee04322b8c0451a23a1399264daea2e1cee2 Mon Sep 17 00:00:00 2001 From: Jens Cornelsen <79703163+IB-Cornelsen@users.noreply.github.com> Date: Tue, 18 Feb 2025 08:24:52 +0100 Subject: [PATCH] Interpolation --- src/astro-typesafe-api-caller.ts | 2 +- .../funktionEinfacheInterpolation.ts | 34 +++++++++++++++++++ ...elKorrekturfaktorNettoVolumen1500T14T15.ts | 3 +- src/lib/pdf/pdfVerbrauchsausweisWohnen.ts | 15 +------- 4 files changed, 37 insertions(+), 17 deletions(-) create mode 100644 src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts diff --git a/src/astro-typesafe-api-caller.ts b/src/astro-typesafe-api-caller.ts index 1724bc14..edb1fa17 100644 --- a/src/astro-typesafe-api-caller.ts +++ b/src/astro-typesafe-api-caller.ts @@ -8,9 +8,9 @@ export const createCaller = createCallerFactory({ "auth/access-token": await import("../src/pages/api/auth/access-token.ts"), "auth/forgot-password": await import("../src/pages/api/auth/forgot-password.ts"), "auth/refresh-token": await import("../src/pages/api/auth/refresh-token.ts"), - "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), "bedarfsausweis-wohnen/[uid]": await import("../src/pages/api/bedarfsausweis-wohnen/[uid].ts"), "bedarfsausweis-wohnen": await import("../src/pages/api/bedarfsausweis-wohnen/index.ts"), + "bilder/[uid]": await import("../src/pages/api/bilder/[uid].ts"), "objekt": await import("../src/pages/api/objekt/index.ts"), "rechnung": await import("../src/pages/api/rechnung/index.ts"), "ticket": await import("../src/pages/api/ticket/index.ts"), diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts new file mode 100644 index 00000000..185126b4 --- /dev/null +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionEinfacheInterpolation.ts @@ -0,0 +1,34 @@ +export function funktionDoppelteInterpolation(SuchSpalte: number, DatenZeile: number, dataZeile: any, dataBox: any): number { + + function interpolate(x: number, x0: number, y0: number, x1: number, y1: number): number { + return y0 + ((y1 - y0) * (x - x0)) / (x1 - x0); + } + + function findNearestPoints(data: any[], value: number, key: string): any[] { + let lower = data[0]; + let upper = data[data.length - 1]; + + for (let i = 0; i < data.length - 1; i++) { + if (data[i][key][0] <= value && data[i + 1][key][0] >= value) { + lower = data[i]; + upper = data[i + 1]; + break; + } + } + + return [lower, upper]; + } + + + const [lowerSuchSpalte, upperSuchSpalte] = findNearestPoints(dataBox, SuchSpalte, 'SuchSpalte'); + const lowerIndex = dataZeile[0].DatenZeile.findIndex((val: number) => val >= DatenZeile) - 1; + const upperIndex = lowerIndex + 1; + + const lowerDatenZeile = dataZeile[0].DatenZeile[lowerIndex]; + const upperDatenZeile = dataZeile[0].DatenZeile[upperIndex]; + + const lowerDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, lowerSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, lowerSuchSpalte.DatenSpalte[upperIndex]); + const upperDatenSpalte = interpolate(DatenZeile, lowerDatenZeile, upperSuchSpalte.DatenSpalte[lowerIndex], upperDatenZeile, upperSuchSpalte.DatenSpalte[upperIndex]); + + return interpolate(SuchSpalte, lowerSuchSpalte.SuchSpalte[0], lowerDatenSpalte, upperSuchSpalte.SuchSpalte[0], upperDatenSpalte); +} \ No newline at end of file diff --git a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15.ts b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15.ts index 25a19950..2ee6de0b 100644 --- a/src/lib/Berechnungen/BedarfsausweisWohnen/funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15.ts +++ b/src/lib/Berechnungen/BedarfsausweisWohnen/funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15.ts @@ -1,6 +1,5 @@ import { datasetGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15 } from "#lib/Berechnungen/BedarfsausweisWohnen/datasetGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15.js"; import { funktionDoppelteInterpolation } from "#lib/Berechnungen/BedarfsausweisWohnen/funktionDoppelteInterpolation.js"; -import { date } from "astro:schema"; export function funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15(LueftungsAnlage: string, LuftDichtheit: string, LueftungBedarfsgefuehrt: string, suchSpalte: number, datenZeile: number): any | null { @@ -59,5 +58,5 @@ return { } -const result = funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15("Zu-/Abluftanlage", "Kategorie I - mit geplanter Dichtheitsprüfung", "bedarfsgeführt", 0, 0.1); +const result = funktionGesamtluftWechselKorrekturfaktorNettoVolumen1500T14T15("Zu-/Abluftanlage", "Kategorie I - mit geplanter Dichtheitsprüfung", "bedarfsgeführt", 0, 0.000001); console.log(result); \ No newline at end of file diff --git a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts index 0f3f2bd0..a15d8415 100644 --- a/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts +++ b/src/lib/pdf/pdfVerbrauchsausweisWohnen.ts @@ -274,20 +274,7 @@ export async function pdfVerbrauchsausweisWohnen(ausweis: VerbrauchsausweisWohne berechnungen?.klimafaktoren[0].klimafaktor.toString() ); - addVerbrauch( - moment(ausweis.startdatum).add(2, "year").format("MM.YYYY"), - moment(ausweis.startdatum).add(3, "year").format("MM.YYYY"), - aufnahme.brennstoff_1, - berechnungen?.primaerfaktorww.toString(), - Math.round(berechnungen?.verbrauch_3_kwh).toString(), - Math.round( - berechnungen?.anteil_warmwasser_1 * berechnungen?.verbrauch_3_kwh - ).toString(), - Math.round( - berechnungen?.anteil_heizung_1 * berechnungen?.verbrauch_3_kwh - ).toString(), - berechnungen?.klimafaktoren[0].klimafaktor.toString() - ); + /* -------------------------------- Seite 4 -------------------------------- */