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

avec Java Discussion :

Définir un axe de rotation avec Transform.createRotateTransform


Sujet :

avec Java

  1. #1
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut Définir un axe de rotation avec Transform.createRotateTransform
    Bonjour.

    Voila mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    distanceMouseX = posCentreX - posMouseX;
    distanceMouseY = posCentreY - posMouseY;
    angleToTurnMouse = (float)Math.toDegrees(Math.atan2(distanceMouseX, distanceMouseY));
    g.draw(chose.transform(Transform.createRotateTransform((float)angleToTurnMouse, chose.getCenterX(), chose.getCenterY())));
    Moi ce que je veux c'est définir le milieu du rectangle comme axe de rotation.
    Le problème c'est que cette axe est actuellement en haut a gauche du rectangle.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Mais c'est quoi cette classe Transform ? En AWT/SWING, pour faire des transformations affines, on a la classe AffineTransform, qui prend par ailleurs un angle en radians, pas en degrés. En plus, s'il fallait reprendre ton cas de code, il faudrait en plus faire une petite transformation de l'angle.

    Voici un petit exemple de principe, en AWT/SWING : peut-être pourra-t-il t'aider avec cette classe Transform (Slick2D peut être ?)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    import java.awt.Canvas;
    import java.awt.Color;
    import java.awt.Graphics2D;
    import java.awt.Shape;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Area;
    import java.awt.geom.Rectangle2D;
     
    import javax.swing.JFrame;
     
    public class TestRotation {
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame();
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		Canvas canvas = new MyCanvas();
    		frame.getContentPane().add(canvas);
     
    		frame.setSize(200, 200);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
     
    	public static class MyCanvas extends Canvas {
     
    		private boolean rotate;
    		private Shape shape;
    		private int mousex;
    		private int mousey;
     
    		public MyCanvas(){
    			super();
    			shape = createShape(50, 50, 100, 75);
    			setEnabled(true);
    			MouseAdapter mouse = new MouseAdapter() {
    				public void mousePressed(MouseEvent e) {
    					rotate=true;
    					mousex=e.getX();
    					mousey=e.getY();
    					repaint();
    				};
    				public void mouseReleased(MouseEvent e) {
    					rotate=false;
    					mousex=e.getX();
    					mousey=e.getY();
    					repaint();
    				};
     
    				@Override
    				public void mouseDragged(MouseEvent e) {
    					mousex=e.getX();
    					mousey=e.getY();
    					repaint();
    				}
    			};
    			addMouseMotionListener(mouse);
    			addMouseListener(mouse);
    		}
     
    		private Shape createShape(double x, double y, double w, double h) {
    			// on crée une forme non symétrique, pour vérifier l'angle
    			Area area=new Area(new Rectangle2D.Double(x, y, w,
    					h));
    			double d = Math.min(h, w)/6;
    			area.subtract(new Area(new Rectangle2D.Double(x+w-2*d,y+h-2*d, d*2,
    					d)));
    			return area;
    		}
     
    		public void paint(java.awt.Graphics g) {
     
    			((Graphics2D)g).draw(shape);
    			if ( rotate ) {
    				g.setColor(Color.RED);
    				// centre de la forme
    				double cx = shape.getBounds().getCenterX();
    				double cy = shape.getBounds().getCenterY();
    				// position relative de la souris au centre de la forme
    				double dx = mousex-cx;
    				double dy = mousey-cy;
    				// angle de rotation
    				double angle = Math.PI/2-Math.atan2(dx, dy);
    				((Graphics2D)g).draw(AffineTransform.getRotateInstance(angle, cx, cy).createTransformedShape(shape));
    			}
     
    		}
     
    	}
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre habitué Avatar de Pecose
    Homme Profil pro
    Batiment
    Inscrit en
    Février 2013
    Messages
    310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Batiment
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2013
    Messages : 310
    Points : 194
    Points
    194
    Par défaut
    Tout a fait juste merci beaucoup.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    angleToTurnMouse = Math.PI/2-Math.atan2(distanceMouseX, distanceMouseY);
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

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

Discussions similaires

  1. Requête avec TRANSFORM
    Par decour dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 15h42
  2. Réponses: 9
    Dernier message: 30/08/2005, 20h18
  3. Définir un angle de rotation pour une image
    Par mateo.14 dans le forum C++
    Réponses: 5
    Dernier message: 25/03/2005, 14h43
  4. [débutant][c++] Axe de rotation caméra
    Par bornibus dans le forum OpenGL
    Réponses: 2
    Dernier message: 28/02/2005, 10h01
  5. [C#] Définir le forme de démarrage avec SharpDevelop
    Par fabrice1596 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/10/2004, 10h52

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