IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

Centrage de dessin en Caml Light


Sujet :

Caml

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut Centrage de dessin en Caml Light
    Bonjour,
    dans le cadre d'un projet je dois reproduire les dessins suivants dans la fenêtre graphique de Caml Light :

    A partir du code suivant pour générer les images :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type Point == float * float;;
    type 'a Image == Point -> 'a;;
    type Region == bool Image;;
     
    let (vstrip : Region) = function (x,y) -> abs_float x <= 0.5;;
    let (checker : Region) = function (x,y) -> mod_float (floor x +. floor y) 2. = 0.;;
    L'image vstrip étant celle de gauche et checker celle de droite.
    Mon code d'affichage est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let afficheRegion region width = let x=size_x() and y=size_y() in 
    for j=y downto 0 do
    	for i=0 to x do
    		if region ((float_of_int i) *. width /. (float_of_int x), (float_of_int j) *. width /. (float_of_int y)) == true then set_color (rgb 0 0 0)
    		else set_color (rgb 255 255 255);
    		plot i j;
    	done;
    done;;
    Mon problème est que Caml considère l'origine dans l'angle inférieur gauche de l'écran tandis que les fonctions vstrip et checker nécessitent qu'il soit au centre de l'écran.
    Ma question est donc de savoir comment adapter ma fonction d'affichage à cette contrainte ? Car au lieu d'avoir une barre verticale centrée pour mon vstrip, elle se trouve totalement à gauche de l'écran.

    Merci d'avance.

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Palca Voir le message
    Bonjour,
    [...]
    Mon problème est que Caml considère l'origine dans l'angle inférieur gauche de l'écran tandis que les fonctions vstrip et checker nécessitent qu'il soit au centre de l'écran.
    Ma question est donc de savoir comment adapter ma fonction d'affichage à cette contrainte ? Car au lieu d'avoir une barre verticale centrée pour mon vstrip, elle se trouve totalement à gauche de l'écran.

    Merci d'avance.
    Tu effectues une translation. C'est-à-dire que tu calcules la position du centre de l'écran (MAX_X/2, MAX_Y/2) puis tu changes les équations pour qu'elles tiennent compte de la translation. Pour une équation y=x^2 tu aurais (y-y_0) = (x-x_0)^2. Tu as oublié tes cours de géométrie ?
    À toi de calculer quel est exactement x_0 ou y_0. Et attention, ils peuvent être négatifs.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    265
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 265
    Points : 281
    Points
    281
    Par défaut
    J'avais pensé à la translation le problème c'est que je n'en faisais qu'une alors que deux sont nécessaires, du coup ce code fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    let afficheRegion region width = let x=size_x() and y=size_y() in 
    for j=y/2 downto (-1)*y/2 do
    	for i=(-1)*x/2 to x/2 do
    		if region ((float_of_int i) *. width /. (float_of_int x), (float_of_int j) *. width /. (float_of_int y)) then set_color (rgb 0 0 0)
    		else set_color (rgb 255 255 255);
    		plot (i+x/2) (j+y/2);
    	done;
    done;;

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    C'est donc ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. programmation en caml light
    Par sicav dans le forum Caml
    Réponses: 36
    Dernier message: 20/04/2007, 22h27
  2. [Caml Light] Nombre de bits
    Par Nilss dans le forum Caml
    Réponses: 4
    Dernier message: 23/03/2007, 20h32
  3. [Caml Light] Librairie 'graphics" et Linux
    Par paf le chiot dans le forum Caml
    Réponses: 11
    Dernier message: 16/03/2007, 18h16
  4. Typage Caml light (je suis totalement perdu!)
    Par ficarre dans le forum Caml
    Réponses: 11
    Dernier message: 24/02/2007, 14h42
  5. Réponses: 3
    Dernier message: 07/12/2006, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo