Graphysica / graphysica

Une calculatrice graphique de physique mécanique.
GNU General Public License v3.0
1 stars 0 forks source link

Graduations en base 10 #17

Open MartyO256 opened 6 years ago

MartyO256 commented 6 years ago

Les graduations de la grille et des axes sont présentement en base 5. En base 10, trop d'étiquettes sont générées à la fois. Idéalement, une étiquette sur deux en base 10 seraient affichées à la fois.

MartyO256 commented 6 years ago

Les méthodes à ajuster sont dans la classe Repere.

    /**
     * Calcule la position virtuelle des graduations horizontales de l'espace,
     * qui correspond à des valeurs d'ordonnées de l'espace. Ces valeurs
     * d'ordonnée de l'espace sont déterminées en ordre croissant à partir de la
     * hauteur de leur écran d'affichage
     *
     * @param hauteur la hauteur virtuelle de l'espace exprimée en pixels.
     * @param espacementMinimal l'espacement virtuel minimal entre chaque
     * graduation.
     * @return l'ensemble des valeurs d'abscisse des graduations horizontales de
     * la toile.
     */
    public double[] graduationsHorizontales(final double hauteur,
            final double espacementMinimal) {
        final double espacementMinimalReel = espacementMinimal / getEchelle()
                .getY();
        final int exposant = (int) (Math.log(espacementMinimalReel)
                / Math.log(PUISSANCE));
        final double espacementReel = Math.pow(PUISSANCE, exposant);
        final double espacementVirtuel = espacementReel * getEchelle().getY();
        double ordonneeAncrage = getOrigineVirtuelle().getY()
                % espacementVirtuel;
        ordonneeAncrage = ordonneeAncrage > 0
                ? ordonneeAncrage - espacementVirtuel : ordonneeAncrage;
        final double[] graduationsHorizontales = new double[(int) (hauteur
                / espacementVirtuel) + 2];
        double y = ordonneeAncrage;
        for (int i = 0; i < graduationsHorizontales.length; i++) {
            graduationsHorizontales[i] = y;
            y += espacementVirtuel;
        }
        for (int i = 0; i < graduationsHorizontales.length / 2; i++) {
            final int indiceInverse = graduationsHorizontales.length - 1 - i;
            final double temporaire = graduationsHorizontales[i];
            graduationsHorizontales[i] = graduationsHorizontales[indiceInverse];
            graduationsHorizontales[indiceInverse] = temporaire;
        }
        return graduationsHorizontales;
    }

    /**
     * Calcule la position virtuelle des graduations verticales de l'espace, qui
     * correspondent à des valeurs d'abscisses de l'espace. Ces valeurs
     * d'abscisse de l'espace sont déterminées en ordre croissant à partir de la
     * largeur de leur écran d'affichage.
     *
     * @param largeur la largeur virtuelle de l'espace exprimée en pixels.
     * @param espacementMinimal l'espacement virtuel minimal entre chaque
     * graduation.
     * @return l'ensemble des valeurs d'ordonnée des graduations verticales de
     * la toile.
     */
    public double[] graduationsVerticales(final double largeur,
            final double espacementMinimal) {
        final double espacementMinimalReel = espacementMinimal / getEchelle()
                .getX();
        final int exposant = (int) (Math.log(espacementMinimalReel)
                / Math.log(PUISSANCE));
        final double espacementReel = Math.pow(PUISSANCE, exposant);
        final double espacementVirtuel = espacementReel * getEchelle().getX();
        double abscisseAncrage = getOrigineVirtuelle().getX()
                % espacementVirtuel;
        abscisseAncrage = abscisseAncrage > 0
                ? abscisseAncrage - espacementVirtuel : abscisseAncrage;
        final double[] graduationsVerticales = new double[(int) (largeur
                / espacementVirtuel) + 2];
        double x = abscisseAncrage;
        for (int i = 0; i < graduationsVerticales.length; i++) {
            graduationsVerticales[i] = x;
            x += espacementVirtuel;
        }
        return graduationsVerticales;
    }