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

JavaFX Discussion :

Positionner un triangle autour d'un cercle


Sujet :

JavaFX

  1. #1
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut Positionner un triangle autour d'un cercle
    Bonjour,


    Je suis entrain de faire un petit jeu. J'ai une planète représentée par un cercle et j'aimerai faire apparaitre des vaisseaux autour de cette dernière. Ils sont représentés par un triangle.
    Néanmoins, j'aimerai surtout les faire apparaitre tout autour de la planète... Et c'est là que ça bloque.
    J'ai crée donc un vaisseau qui a une forme de type Polygon. Je peux alors le positionner par le biais de la method TranslateX et Translate Y qui vont le déplacer en prenant son centre comme point. Le soucis est que je ne sais pas comment réussir à positionner mes triangles correctement avec leur base en direction du centre du cercle ( donc la pointe vers l'extérieur ). Je bloque à vrai dire sur l'effet de translation...
    Avez vous le moyen de m'éclairer !

    Je vous remercie d'avance !

    Ben.

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par LePtitBen Voir le message
    Je bloque à vrai dire sur l'effet de translation...
    Oui, en l'occurrence tu ne te tromperais pas avec la rotation plutôt en fait ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    Je sais placer mon triangle à une distance du centre par le biais des methods TranslateX et translateY. Mais je ne sais pas comment faire cet "effet de translation " pour suivre le tracé du rayon du cercle. Mon problème à vrai dire est surtout celui là ^^'

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Mets un bout de code simpliste et utilisable, parce que j'avoue ne pas bien comprendre au final le problème.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    En gros, j'ai un cercle, et j'aimerai déplacer un point autour de ce cercle d'une distance de radius + x ( x pour une valeur quelconque ). Mais actuellement, je n'arrive juste qu'à le placer sur l'axe x du cercle.
    Donc oui, c'est une rotation autour du cercle !

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    https://fr.wikipedia.org/wiki/Cercle_trigonométrique ?

    Donc à priori un simple calcule va te donner la position du point selon l'angle de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    x=cos(angle)*distance;
    y=sin(angle)*distance;
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    Merci de ta réponse !
    En effet, je pensais à cela, (en ayant fais quelques recherches ), mais comment déterminer la valeur de mon angle ?

  8. #8
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Moui, c'est pas gagné Apparement ce n'est pas ce que tu veux...

    Donc en gros si je comprends bien pour finir.

    - Tu as une planète positionnée quelque part dans l'espace.
    - Tu as un ou des vaisseaux quelque part dans l'espace et tu voudrais leur faire subir une rotation afin que l'avant du vaiseau (donc un sommet du triangle) soit orienter dans la direction entre le centre de la planète et la position du vaisseau ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    Oui, j'ai une planète dans l'espace, et un vaisseau. J'aimerai pouvoir positionner plusieurs vaisseaux autour de cette planète. Pour ce faire, j'allais positionner un vaisseau autour de cette planète, puis faire des translations tout autour dans une boucle ( D'où la formule que tu m'as donné ) pour les positionner tout autour de manière uniforme. Mais le problème est que, comment je déterminer l'angle alpha ? Sachant que l'origine du repère est le centre du cercle. J'ai pas réellement trouvé de method faisant cela. Pour la suite, c'est ça !

  10. #10
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    A titre d'exemple, voilà ce que j'ai avec un seul vaisseau.
    Nom : Capture du 2018-12-03 15-30-13.png
Affichages : 359
Taille : 4,5 Ko
    Et j'aimerai pouvoir en mettre plusieurs tout autour de la planète dans cette disposition. Cela reviendrait à créer un vaisseau à la même position que celui présent sur l'image, mais décale d'un côté. Et c'est là que ça bloque !

  11. #11
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par LePtitBen Voir le message
    Cela reviendrait à créer un vaisseau à la même position que celui présent sur l'image, mais décale d'un côté. Et c'est là que ça bloque !
    Ce n'est franchement pas claire du tout "le décalé d'un coté".

    Une image pour illustrer ? Un morceau de code aussi de ce que tu as déjà accompli ?
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	/* Fais apparaitre un vaisseau autour de la planète */
    	public ArrayList<SpaceCraft> spawnSpaceCraft(int size ) {
    		int value = size;
    		ArrayList<SpaceCraft> listSpaceCraft = new ArrayList<SpaceCraft>();
    		for(int i = 0; i < value ; i++) {
    			SpaceCraft vaisseau = new SpaceCraft();
    			vaisseau.getShape().setTranslateX(this.shape.getCenterX() +  this.shape.getRadius() + 5);// Je le positionne à une position de base
    			vaisseau.getShape().setTranslateY(this.shape.getCenterY() +  this.shape.getRadius() + 5 );
    			checkPosition(vaisseau,listSpaceCraft); // Puis je le repositionne.
    			vaisseau.getShape().setFill(player.getColor()); // Et je lui ajoute la couleur du joueur;
    			listSpaceCraft.add(vaisseau);
    		}
    		return listSpaceCraft;
    	}
    Je positionne un vaisseau à une position de base du cercle. Puis si la place est prise je le décale. De manière à qu'il reste en "orbite autour du cercle". Et c'est là que ça coince :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	private void checkPosition(SpaceCraft vaisseau, ArrayList<SpaceCraft> listSpaceCraft) {
    		double angle = Math.atan((shape.getCenterY()- vaisseau.getShape().getLayoutY())/(shape.getCenterX()-vaisseau.getShape().getLayoutX()));
    		for(SpaceCraft spaceCraftSpawn : listSpaceCraft) {
    			while(spaceCraftSpawn.getShape().getBoundsInParent().intersects(vaisseau.getShape().getBoundsInParent())){		/* Si les 2 vaisseaux se cognent, je le déplace le long du cercle */		
    				vaisseau.getShape().setTranslateX(Math.cos(angle)*shape.getRadius());
    				vaisseau.getShape().setTranslateY(Math.sin(angle)*shape.getRadius());
    				angle++;
    			}
    		}
    	}
    Si ya déjà un vaisseau, j'essaye alors de le déplacer plus loin autour du cercle. Mais ça ne marche pas vraiment ! ^^

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 42
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Je t’avouerai que je n'ai pas compris ton résonnement sur les translates X, Y.

    Par contre ce que je te propose , c'est de faire une transformation de tes vaisseaux en utilisant une rotation et en faisant évoluer l'angle de rotation pour chaque vaisseau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Rotate rotate = new Rotate(angle,radius+5,radius+5); 
    vaisseau.getTransforms().addAll(rotate);
    a+.

  14. #14
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Octobre 2018
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Octobre 2018
    Messages : 62
    Points : 79
    Points
    79
    Par défaut
    Salut Bbaboulinet,

    Merci de ta réponse. En effet, c'est ce que j'ai fais, et cela fonctionne plutôt bien !
    Merci en tout cas de ton aide ainsi que celle de wax78

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

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