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