Esiste un modo semplice per digitare i simboli matematici comuni?

1

Disclaimer: sono sicuro che qualcuno si lamenterà della facilità d'uso, ai fini di questa domanda considera la leggibilità come l'unico fattore che conta

Quindi ho trovato questo sito che converte in easting northing, non è molto importante cosa significhi anche ma ecco come appare il pezzo di javascript.

/**
 * Convert Ordnance Survey grid reference easting/northing coordinate to (OSGB36) latitude/longitude
 *
 * @param   {OsGridRef} gridref - easting/northing to be converted to latitude/longitude
 * @returns {LatLonE} latitude/longitude (in OSGB36) of supplied grid reference
 */
OsGridRef.osGridToLatLong = function(gridref) {
    var E = gridref.easting;
    var N = gridref.northing;

    var a = 6377563.396, b = 6356256.909;         // Airy 1830 major & minor semi-axes
    var F0 = 0.9996012717;                        // NatGrid scale factor on central meridian
    var φ0 = 49*Math.PI/180, λ0 = -2*Math.PI/180; // NatGrid true origin
    var N0 = -100000, E0 = 400000;                // northing & easting of true origin, metres
    var e2 = 1 - (b*b)/(a*a);                     // eccentricity squared
    var n = (a-b)/(a+b), n2 = n*n, n3 = n*n*n;    // n, n², n³

    var φ=φ0, M=0;
    do {
        φ = (N-N0-M)/(a*F0) + φ;

        var Ma = (1 + n + (5/4)*n2 + (5/4)*n3) * (φ-φ0);
        var Mb = (3*n + 3*n*n + (21/8)*n3) * Math.sin(φ-φ0) * Math.cos(φ+φ0);
        var Mc = ((15/8)*n2 + (15/8)*n3) * Math.sin(2*(φ-φ0)) * Math.cos(2*(φ+φ0));
        var Md = (35/24)*n3 * Math.sin(3*(φ-φ0)) * Math.cos(3*(φ+φ0));
        M = b * F0 * (Ma - Mb + Mc - Md);              // meridional arc

    } while (N-N0-M >= 0.00001);  // ie until < 0.01mm

    var cosφ = Math.cos(φ), sinφ = Math.sin(φ);
    var ν = a*F0/Math.sqrt(1-e2*sinφ*sinφ);            // nu = transverse radius of curvature
    var ρ = a*F0*(1-e2)/Math.pow(1-e2*sinφ*sinφ, 1.5); // rho = meridional radius of curvature
    var η2 = ν/ρ-1;                                    // eta = ?

    var tanφ = Math.tan(φ);
    var tan2φ = tanφ*tanφ, tan4φ = tan2φ*tan2φ, tan6φ = tan4φ*tan2φ;
    var secφ = 1/cosφ;
    var ν3 = ν*ν*ν, ν5 = ν3*ν*ν, ν7 = ν5*ν*ν;
    var VII = tanφ/(2*ρ*ν);
    var VIII = tanφ/(24*ρ*ν3)*(5+3*tan2φ+η2-9*tan2φ*η2);
    var IX = tanφ/(720*ρ*ν5)*(61+90*tan2φ+45*tan4φ);
    var X = secφ/ν;
    var XI = secφ/(6*ν3)*(ν/ρ+2*tan2φ);
    var XII = secφ/(120*ν5)*(5+28*tan2φ+24*tan4φ);
    var XIIA = secφ/(5040*ν7)*(61+662*tan2φ+1320*tan4φ+720*tan6φ);

    var dE = (E-E0), dE2 = dE*dE, dE3 = dE2*dE, dE4 = dE2*dE2, dE5 = dE3*dE2, dE6 = dE4*dE2, dE7 = dE5*dE2;
    φ = φ - VII*dE2 + VIII*dE4 - IX*dE6;
    var λ = λ0 + X*dE - XI*dE3 + XII*dE5 - XIIA*dE7;

    return new LatLonE(φ.toDegrees(), λ.toDegrees(), GeoParams.datum.OSGB36);
}

Ho trovato che è un modo davvero carino di scrivere un algoritmo, almeno per quanto riguarda la redability. C'è un modo per scrivere facilmente i simboli speciali. E scrivendo facilmente intendo NON copiarli / incollarli.

    
posta srcspider 08.06.2014 - 13:55
fonte

1 risposta

1

Ho pensato a una domanda divertente fino a quando ho capito che volevi sfruttare il fatto che alcuni linguaggi consentono più di semplici caratteri ASCII nei loro identificatori e andare verso una notazione che si adatta meglio al dominio del problema, come in programmazione intenzionale . Qui il dominio del problema è la geometria.

La risposta alla tua domanda dipende dal tuo ambiente. Suppongo che tu voglia inserire i codici Unicode . Su una macchina Windows useresti uno strumento diverso rispetto a un iPhone o Mac o X11. La maggior parte di questi sistemi presenta una sorta di applicazione estesa per la tastiera.

In generale, penso che il vantaggio di una migliore comprensione non valga la pena di modificare queste righe usando questo metodo primitivo.

Ma questo cambia se il sistema è ben fatto:

In effetti mi piace molto l'editor MathJax su math.stackexchange che mi consente di inserire e visualizzare formule matematiche LaTeX in modo accettabile modo.

Mi piacerebbe avere qualcosa di simile nei miei ambienti di programmazione generali Emacs (ahimè, che avrebbe bisogno di una migliore integrazione con la GUI) e degli IDE JetBrains.

Credo ancora nella programmazione alfabetica di Knuth. Ma tutto questo non è ben integrato negli ambienti del mondo reale / industriale, purtroppo.

Grazie per la tua domanda perché mi ha fatto rivisitare la programmazione intenzionale e lì ho notato che intenzionale ha rilasciato (vedi sopra il link Fowler) e che c'è un IDE DSL da JetBrains: Sistema di programmazione Meta !

    
risposta data 08.06.2014 - 15:14
fonte

Leggi altre domande sui tag