Jonathan Harker: Hilfe für Rechnen mit JavaScript

Beitrag lesen

Hallo matze511,

Wenn das Script korrekt ist, kannst du es ja von ChatGPT übersetzen lassen:

To translate your Swift code to JavaScript, I'll start by creating a class structure in JavaScript that resembles the Swift class. JavaScript does not have native support for specific features like Swift's computed properties and enums, but we can simulate them with functions and conditionals. Here's a translated version of your Swift class:

class Dachgeometrie {
    constructor() {
        // Default computation mode
        this.computationMode = 'traufhoVordachNeigung'; // Simulated enum value

        // Input profile dimensions
        this.grundmaß = 0.0;
        this.firsthöhe = 0.0;
        this.traufhöhe = 0.0;
        this.dachüberstand = 0.0;
        this.dachneigung = 0.0;
        this.okFußpfette = 0.0;
        this.okFirstpfette = 0.0;

        // Timber dimensions for calculation
        this.sparrenhöhe = 0.18;
        this.fußpfettenhöhe = 0.12;
        this.fußpfettenbreite = 0.12;
        this.firstpfettenbreite = 0.12;

        // Roof production dimensions
        this.klauentiefe = 0.03;
        this.fußpfettenrücksprung = 0.0;
        this.lotrechtesObholz = 0.0;
        this.waagerechtesObholz = 0.0;
        this.okKniestock = 0.0;
        this.verkämmungZangen = 0.02;
        this.zangenRücksprung = 0.0;
        this.firstlaschenRücksprung = 0.0;
        this.returnBaptismOfSolderToRectangular = 0.0;

        // Properties for calculations
        this.raumhöheRohbau = 2.75;
        this.sparrenbreite = 0.08;
        this.zangenhöhe = 0.16;
        this.zangenbreite = 0.08;
        this.mittelpfettenhöhe = 0.22;
        this.mittelpfettenbreite = 0.16;
        this.firstpfettenhöhe = 0.12;
        this.firstlaschenbreite = 0.04;

        // Traufe vertical
        this.traufabschnittLotrecht = 0.0;
        this.klauefußpfettemaßkette = 0.0;
        this.klauefirstmaßkette = 0.0;
        this.klauemittelpfettemaßkette = 0.0;
        this.perpendicularklauefirstmaßkette = 0.0;
        this.traufabschnittlotrechteinzelmaß = 0.0;

        // Formulas and calculations
        this.beta = 0.0;  // Additional property for the angle

        // Further dimensions and calculations can be added here similarly
    }

    // Function to update profile dimensions based on the computation mode
    updateProfilmaße() {
        const PI = Math.PI;

        switch (this.computationMode) {
            case 'traufhoVordachNeigung':
                this.firsthöhe = Math.round((((this.grundmaß + this.dachüberstand) * Math.tan(this.dachneigung * PI / 180)) + this.traufhöhe) / 0.001) * 0.001;
                this.okKniestock = Math.round((this.dachüberstand * Math.tan(this.dachneigung * PI / 180)) / 0.001) * 0.001;
                this.lotrechtesObholz = (this.sparrenhöhe - this.klauentiefe) / Math.cos(this.dachneigung * PI / 180);
                
                let a = Math.round(((this.dachüberstand + this.fußpfettenrücksprung) * Math.tan(this.dachneigung * PI / 180)) / 0.001) * 0.001;
                this.okFußpfette = Math.round(((a - this.lotrechtesObholz) + this.traufhöhe) / 0.001) * 0.001;
                
                let b = this.grundmaß - 0.5 * this.firstpfettenbreite + this.dachüberstand;
                let c = b * Math.tan(this.dachneigung * PI / 180) - this.lotrechtesObholz + this.traufhöhe;
                this.okFirstpfette = Math.round(c / 0.001) * 0.001;
                break;

            case 'firsthoTraufhoVordach':
                this.dachneigung = Math.round(((Math.atan((this.firsthöhe - this.traufhöhe) / (this.grundmaß + this.dachüberstand))) / PI * 180) / 0.1) * 0.1;
                this.okKniestock = Math.round((this.dachüberstand * Math.tan(this.dachneigung * PI / 180)) / 0.001) * 0.001;
                this.lotrechtesObholz = (this.sparrenhöhe - this.klauentiefe) / Math.cos(this.dachneigung * PI / 180);
                
                let a2 = Math.round(((this.dachüberstand + this.fußpfettenrücksprung) * Math.tan(this.dachneigung * PI / 180)) / 0.001) * 0.001;
                this.okFußpfette = Math.round(((a2 - this.lotrechtesObholz) + this.traufhöhe) / 0.001) * 0.001;

                let b2 = this.grundmaß - 0.5 * this.firstpfettenbreite + this.dachüberstand;
                let c2 = b2 * Math.tan(this.dachneigung * PI / 180) - this.lotrechtesObholz + this.traufhöhe;
                this.okFirstpfette = Math.round(c2 / 0.001) * 0.001;
                break;

            case 'vordachNeigungOKFußpf':
                this.lotrechtesObholz = (this.sparrenhöhe - this.klauentiefe) / Math.cos(this.dachneigung * PI / 180);
                this.firsthöhe = Math.round((((this.grundmaß - this.fußpfettenrücksprung) * Math.tan(this.dachneigung * PI / 180)) + this.okFußpfette + this.lotrechtesObholz) / 0.001) * 0.001;
                this.traufhöhe = Math.round(((this.okFußpfette + this.lotrechtesObholz) - (this.dachüberstand + this.fußpfettenrücksprung) * Math.tan(this.dachneigung * PI / 180)) / 0.001) * 0.001;
                
                let a3 = this.grundmaß - 0.5 * this.firstpfettenbreite + this.dachüberstand;
                let b3 = a3 * Math.tan(this.dachneigung * PI / 180) - this.lotrechtesObholz + this.traufhöhe;
                this.okFirstpfette = Math.round(b3 / 0.001) * 0.001;
                break;
        }

        // Additional calculations for "MarkingValuesController"
        this.traufabschnittLotrecht = Math.sqrt(Math.pow((this.grundmaß + this.dachüberstand), 2) + Math.pow((this.firsthöhe - this.traufhöhe), 2));
        this.klauefußpfettemaßkette = Math.sqrt(Math.pow((this.dachüberstand + this.fußpfettenrücksprung), 2) + Math.pow((this.okFußpfette + this.lotrechtesObholz - this.traufhöhe), 2));
        this.klauefirstmaßkette = Math.sqrt(Math.pow((this.grundmaß + this.dachüberstand - (0.5 * this.firstpfettenbreite)), 2) + Math.pow((this.okFirstpfette + this.lotrechtesObholz - this.traufhöhe), 2));
        let c3 = this.raumhöheRohbau + (this.zangenhöhe - this.verkämmungZangen) + this.mittelpfettenhöhe + this.lotrechtesObholz - this.traufhöhe;
        this.klauemittelpfettemaßkette = c3 / Math.sin(this.dachneigung * PI / 180);

        // More calculations can be added here as per the original logic
    }

    // Computed properties in Swift can be replaced with functions in JS
    get überhangfußpfettenachinnen() {
        return this.fußpfettenrücksprung + this.fußpfettenbreite;
    }

    get drempelSparren() {
        return (this.fußpfettenhöhe - (this.klauentiefe / Math.cos(this.dachneigung * Math.PI / 180))) / Math.tan(this.dachneigung * Math.PI / 180);
    }

    get ukFirstlasche() {
        return this.okFirstpfette - this.firstpfettenhöhe - this.firstlaschenbreite;
    }

    get okmittelpfette() {
        return this.raumhöheRohbau + this

Jetzt musst du es in deine App einbinden und testen!

Bis bald! Jonathan

--
"Ich habe heute ein Elan-Problem und mein Tatenvolumen ist fast aufgebraucht!"