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

2D Java Discussion :

Problème pour trouver un point


Sujet :

2D 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 Problème pour trouver un point
    Bonjour,

    Pour changer, je vais essayer d'être clair. Je cherche les coordonnées x et y d'un point.

    J'ai en ma possession 2 points à partir desquels trouver le troisième. Un premier point est le centre de ma souris et le deuxième est un point quelque part sur l'écran. Je trace, si les points sont suffisamment près l'un de l'autre, un segment d'une longueur prédéfinie qui part de ma souris, traverse le point sur l’écran et termine sa course au fameux troisième point que je recherche.

    Comment faire ? Merci de votre aide.
    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 kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Le plus simple, c'est de revoir ses formules de math niveau collège ou début lycée...

    Trouver le vecteur de la droit constituant tes deux points.

    https://fr.wikipedia.org/wiki/Vecteur_directeur
    Fait en un vecteur unitaire et multiplie le par la longueur de ton segment voulu et additionne le à ton point d'origine (le point de ta sourie).
    Logiquement, la méthode Point2D.distance(double x1, double y1) peut t'aider.

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    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,

    Ce n'est absolument pas un problème de Java, mais un problème de math ou d'algorithmie. Tu devrais plutôt poser ce genre de question dans le forum dédié.

    On pourrait utiliser une solution à base d'équations (équation de la droite, formule de la distance...), mais on peut utiliser Thalès pour résoudre ça plus facilement et plus rapidement. Il suffit de calculer la distance entre P1 (la souris) et P2 le point fixe. La distance entre P1 et 3 est fixée dans ton problème. Tu peux connaitre le rapport entre ces deux distances, en faisant la division de l'un par l'autre. Ensuite, tu fais la différence entre les coordonnées X, et tu appliques ce rapport, puis pareil sur Y. Et tu as ton troisième point.
    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.

  4. #4
    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
    Ok merci.
    Pour Joel: c'est ce que j'ai fait mais ca marche pas, du coup ca doit venir de mon code je vais continuer de chercher.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  5. #5
    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
    Montre ton code peut-être. Ça ne viendrait pas de la division des distances, que tu ferais en int (donc du int divisé par du int, donc pas une division exacte) ?
    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.

  6. #6
    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
    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
    private Area addShadow(Rectangle2D b) {
    		Point2D p1 = new Point2D.Double(b.getX(), b.getY());
    		Point2D p2 = new Point2D.Double(b.getX()+b.getWidth(), b.getY());
    		Point2D p3 = new Point2D.Double(b.getX()+b.getWidth(), b.getY()+b.getHeight());
    		Point2D p4 = new Point2D.Double(b.getX(), b.getY()+b.getHeight());
     
    		double r = ellipse.getWidth()/2;
    		Point2D e = new Point2D.Double(ellipse.getX() + r, ellipse.getY() + r);
     
    		double d1 = e.distance(p1);
    		double d2 = e.distance(p2);
    		double d3 = e.distance(p3);
    		double d4 = e.distance(p4);
     
    		Point2D t1 = new Point2D.Double();
    		Point2D t2 = new Point2D.Double();
    		Point2D t3 = new Point2D.Double();
    		Point2D t4 = new Point2D.Double();
     
     
     
    		if(d1<=d2 && d1<=d3 && d1<=d4){
    			t1 = new Point2D.Double(p2.getX()*(r/d2), p2.getY()*(r/d2));//p2
    			t2 = new Point2D.Double(p4.getX()*(r/d4), p4.getY()*(r/d4));//p4
    			t3 = p4;
    			t4 = p2;
    		}else if(d2<=d1 && d2<=d3 && d2<=d4){
    			t1 = new Point2D.Double(p3.getX()*(r/d3), p3.getY()*(r/d3));//p3
    			t2 = new Point2D.Double(p1.getX()*(r/d1), p1.getY()*(r/d1));//p1
    			t3 = p1;
    			t4 = p3;
    		}else if(d3<=d1 && d3<=d2 && d3<=d4){
    			t1 = new Point2D.Double(p4.getX()*(r/d4), p4.getY()*(r/d4));//p4
    			t2 = new Point2D.Double(p2.getX()*(r/d2), p2.getY()*(r/d2));//p2
    			t3 = p2;
    			t4 = p4;
    		}else if(d4<=d1 && d4<=d2 && d4<=d3){
    			t1 = new Point2D.Double(p1.getX()*(r/d1), p1.getY()*(r/d1));//p1
    			t2 = new Point2D.Double(p3.getX()*(r/d3), p3.getY()*(r/d3));//p3
    			t3 = p1;
    			t4 = p3;
    		}
     		Area returnArea = new Area();
    		Arc2D arc = this.createArc2D(t1, t2, new Point2D.Double(ellipse.getX(), ellipse.getY()));
    		Area area = new Area(arc);
    		Polygon poly = new Polygon();
     
    		//this.add(area);
    		poly.addPoint((int)t1.getX(), (int)t1.getY());
    		poly.addPoint((int)t2.getX(), (int)t2.getY());
    		poly.addPoint((int)t3.getX(), (int)t3.getY());
    		poly.addPoint((int)t4.getX(), (int)t4.getY());
    		area = new Area(poly);
    		returnArea.add(area);
    		return returnArea;
    	}
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  7. #7
    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
    J'ai corriger l'histoire du "int".
    Je faisais bien cette erreur mais après correction ca ne change pas le résultat.

    Petite explication du code:
    Nom : Capture.PNG
Affichages : 133
Taille : 5,1 Ko

    Area(Ellipse2D) et représenter par le cercle que j'ai dessiner.
    A l'écran il y a des Rectangle2D, c'est le petit carré noir.
    Le point au milieu c'est ma souris et le centre d'ellipse.
    Les deux traits qui partent du milieu sont les traits imaginaire dont je parlais cette après-midi.
    Et le polygon rouge, c'est ce que le veux dessiner.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  8. #8
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    Peux-tu éditer ton code et changer les nom des variables pour qu'on ai une idée de ce qu tu manipule. Peut-être ajouter un ou deux commentaires.

    Car, on a trop d'opérations avec trop de variables pour comprendre ce qui est fait.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  9. #9
    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
    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
    //de p1 à p4 ce sont les coins du carré
    		Point2D p1 = new Point2D.Double(b.getX(), b.getY());
    		Point2D p2 = new Point2D.Double(b.getX()+b.getWidth(), b.getY());
    		Point2D p3 = new Point2D.Double(b.getX()+b.getWidth(), b.getY()+b.getHeight());
    		Point2D p4 = new Point2D.Double(b.getX(), b.getY()+b.getHeight());
     
    		//e est le centre d'ellipse
    		double r = ellipse.getWidth()/2;
    		Point2D e = new Point2D.Double(ellipse.getX() + r, ellipse.getY() + r);
     
    		//de d1 à d4 c'est la distance du centre d'ellipse au coins du carré
    		double d1 = e.distance(p1);
    		double d2 = e.distance(p2);
    		double d3 = e.distance(p3);
    		double d4 = e.distance(p4);
     
     
    		//de t2 à t4 c'est les futurs coins du polygon
    		Point2D t1 = new Point2D.Double();
    		Point2D t2 = new Point2D.Double();
    		Point2D t3 = new Point2D.Double();
    		Point2D t4 = new Point2D.Double();
     
     
    		//là je dit, si le coté le plus proche du centre d'ellipse est p1(correspondance avec d1), alors:
    		if(d1<=d2 && d1<=d3 && d1<=d4){
    			t1 = new Point2D.Double(p2.getX()*(r/d2), p2.getY()*(r/d2));//p2
    			t2 = new Point2D.Double(p4.getX()*(r/d4), p4.getY()*(r/d4));//p4
    			t3 = p4;
    			t4 = p2;
    		}else if(d2<=d1 && d2<=d3 && d2<=d4){
    			t1 = new Point2D.Double(p3.getX()*(r/d3), p3.getY()*(r/d3));//p3
    			t2 = new Point2D.Double(p1.getX()*(r/d1), p1.getY()*(r/d1));//p1
    			t3 = p1;
    			t4 = p3;
    		}else if(d3<=d1 && d3<=d2 && d3<=d4){
    			t1 = new Point2D.Double(p4.getX()*(r/d4), p4.getY()*(r/d4));//p4
    			t2 = new Point2D.Double(p2.getX()*(r/d2), p2.getY()*(r/d2));//p2
    			t3 = p2;
    			t4 = p4;
    		}else if(d4<=d1 && d4<=d2 && d4<=d3){
    			t1 = new Point2D.Double(p1.getX()*(r/d1), p1.getY()*(r/d1));//p1
    			t2 = new Point2D.Double(p3.getX()*(r/d3), p3.getY()*(r/d3));//p3
    			t3 = p1;
    			t4 = p3;
    		}
     
    		//tout ca on s'ent fou, juste je met dans un Area et je return, et Arc2D c'est pour plus tard
     		Area returnArea = new Area();
    		Arc2D arc = this.createArc2D(t1, t2, new Point2D.Double(ellipse.getX(), ellipse.getY()));
    		Area area = new Area(arc);
    		Polygon poly = new Polygon();
     
    		//this.add(area);
    		poly.addPoint((int)t1.getX(), (int)t1.getY());
    		poly.addPoint((int)t2.getX(), (int)t2.getY());
    		poly.addPoint((int)t3.getX(), (int)t3.getY());
    		poly.addPoint((int)t4.getX(), (int)t4.getY());
    		area = new Area(poly);
    		returnArea.add(area);
    		return returnArea;
    	}
     
    	public void addDarkness(){
    		this.reset();
    		this.add(new Area(new Rectangle2D.Double(0, 0, p.getScreenWidth(), p.getScreenHeight())));
     
    	}
     
    	public Arc2D createArc2D(Point2D p1, Point2D p2, Point2D center){
    		Point2D middle = new Point2D.Double((p1.getX()+p2.getX())/2, (p1.getY()+p2.getY())/2);
    		Double radius = p1.distance(center);
     
    		Double distP1 = Math.sqrt(Math.pow(p1.getX(), 2) + Math.pow(p1.getY(), 2));
    		Double distP2 = Math.sqrt(Math.pow(p2.getX(), 2) + Math.pow(p2.getY(), 2));
     
    		double angSt; 
    		double angExt;
     
    		if(distP1<distP2){
    			angSt = angle(center, p1); 
    			angExt = angle(center, p2)-angSt;
    		}else{
    			angSt = angle(center, p2); 
    			angExt = angle(center, p1)-angSt;
    		}
     
    		if(center.getX()>middle.getX()){ angExt+=360;}
     
    		Arc2D arc2D = new Arc2D.Double();
    		arc2D.setArcByCenter(center.getX(), center.getY(), radius, angSt, angExt, Arc2D.OPEN);
    		return arc2D;

    C'est compréhensible?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  10. #10
    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
    Le bout de code important c'est lui:
    Pour calculer le x que je cherche, je dit "coinDuCarré.getX() * (rayon/distance entre centreDuCercle et coinDuCarré)".
    C'est ca qu'il faut faire?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  11. #11
    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
    Je ne vois pas où il y aurait une erreur dans ton code. Mais je ne sais pas ce que tu obtiens comme résultat et je ne peux pas tester complètement

    Démo de principe pour le point isolé (ici un point fixe, un point mobile (la souris), et je calcule l'intersection entre la droite ainsi déterminée et un cercle de rayon défini :
    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
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
     
    public class Demo3Point extends JPanel {
     
    	/**
             * 
             */
    	private static final long serialVersionUID = 1L;
     
    	private static final int DOT_RADIUS = 3;
    	private static final int DOT_WIDTH = DOT_RADIUS*2;
    	private double distance;
    	private Point2D aimingPoint;
     
    	private Point2D mousePoint;
    	private Point2D resultPoint; 
     
    	public Demo3Point(double distance, Point2D aimingPoint) {
    		if ( distance<0 ) throw new IllegalArgumentException();
    		if ( aimingPoint==null ) throw new IllegalArgumentException();
    		this.distance=distance;
    		this.aimingPoint=aimingPoint;
    		MouseAdapter mouseListener = new MouseAdapter() {
     
    			@Override
    			public void mouseExited(MouseEvent e) {
    				mousePoint=null;
    				resultPoint=null;
    				repaint();
    			}
     
    			@Override
    			public void mouseEntered(MouseEvent e) {
    				computePoint(e.getPoint());
    				repaint();
    			}
     
    			@Override
    			public void mouseMoved(MouseEvent e) {
    				computePoint(e.getPoint());
    				repaint();
    			}
     
    			@Override
    			public void mouseDragged(MouseEvent e) {
    				computePoint(e.getPoint());
    				repaint();
    			}
     
    		};
    		addMouseListener(mouseListener);
    		addMouseMotionListener(mouseListener);
    	}
     
    	protected void computePoint(Point2D mousePoint) {
    		this.mousePoint=mousePoint;
    		double pointDistance = aimingPoint.distance(mousePoint);
    		double f = distance / pointDistance;
    		double x = (mousePoint.getX()-aimingPoint.getX())*f;
    		double y = (mousePoint.getY()-aimingPoint.getY())*f;
    		resultPoint = new Point2D.Double(aimingPoint.getX()+x,aimingPoint.getY()+y);
    	}
     
    	// not thread safe
    	protected void setDistance(int value) {
    		distance=value;
    		repaint();
    	}
     
    	@Override
    	protected void paintComponent(Graphics g) { 
    		super.paintComponent(g);
    		if ( resultPoint!=null && mousePoint!=null ) {
    			if ( resultPoint.distance(aimingPoint)>mousePoint.distance(aimingPoint) ) {
    				g.setColor(Color.BLUE);
    				g.drawLine((int)mousePoint.getX(), (int)mousePoint.getY(), (int)resultPoint.getX(), (int)resultPoint.getY());
    			}
    			if ( mousePoint!=null ) {
    				g.setColor(Color.RED);
    				g.drawLine((int)mousePoint.getX(), (int)mousePoint.getY(), (int)aimingPoint.getX(), (int)aimingPoint.getY());
    			}
    			if ( mousePoint!=null ) {
    				g.setColor(Color.RED); 
    				drawPoint(g, mousePoint);
    			}
    			if ( resultPoint!=null ) {
    				g.setColor(Color.BLUE); 
    				drawPoint(g, resultPoint);
    			}
    			g.setColor(Color.RED); 
    			drawPoint(g, aimingPoint); 
    		}
    	}
     
    	private void drawPoint(Graphics g, Point2D point) {
    		g.fillOval((int)point.getX()-DOT_RADIUS, (int)point.getY()-DOT_RADIUS, DOT_WIDTH,DOT_WIDTH);
    	}
     
    	public static void main(String[] args) {
    		JFrame frame = new JFrame("Démo");
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     
    		final Demo3Point panel = new Demo3Point(100, new Point(300,200));
     
    		frame.getContentPane().add(panel);
    		JPanel configPanel = new JPanel();
    		JSlider slider = new JSlider(5, 200, 100);
    		configPanel.add(slider);
    		frame.getContentPane().add(configPanel, BorderLayout.SOUTH);
    		slider.addChangeListener(new ChangeListener() {
     
    			@Override
    			public void stateChanged(ChangeEvent e) {
    				panel.setDistance(slider.getValue());
    			}
     
    		});
     
    		frame.setSize(600, 400);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
     
    	}
     
     
    }
    Au passage, tu peux utiliser Path2D au lieu de Polygon, pour conserver la précision du double pour tes points.

    Pour le reste, je ne sais pas ce que tu cherches à faire (déterminer la zone cachée à la vue d'un observateur (le centre de l'ellipse ?), mais je suis dubitatif sur ton algorithme globalement.
    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.

  12. #12
    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
    Nom : Capture2.PNG
Affichages : 129
Taille : 5,9 Ko
    Voila le resultat...
    En fait je substract le resultat a un autre Area pour faire comme un trou pour simuler la lumière.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  13. #13
    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
    En fait ca qu'il y a c'est que les points que je calcule partent a l’opposé du point 0,0.
    Comme si la source lumineuse venais du point en haut a gauche de l’écran.
    J'ai tester mes variables pour savoir si il n'y en a pas une qui est a 0,0 mais j'ai rien trouver.
    J'ai foiré quelque chose mais je sais pas quoi.
    Es ce que tu as une technique pour trouver les erreurs?
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  14. #14
    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
    A priori, l'image que tu montres est correcte non ?
    Citation Envoyé par Pecose Voir le message
    En fait ca qu'il y a c'est que les points que je calcule partent a l’opposé du point 0,0.
    Qu'est-ce que tu entends par opposé du point 0.0 ? Est-ce que ton problème n'est pas simplement une inversion du rapport ? (au lieu diviser par le rayon, divise le rayon par)
    Citation Envoyé par Pecose Voir le message
    Comme si la source lumineuse venais du point en haut a gauche de l’écran.
    Le point en haut à gauche est bien le 0, 0. Mais la source lumineuse, elle est bien censée venir du centre du cercle non ?

    Citation Envoyé par Pecose Voir le message
    Es ce que tu as une technique pour trouver les erreurs?
    Oui : le mode debug et les traces. Et les essais.
    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.

  15. #15
    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
    Non elle n'est pas correct, l'ombre est comme déterminé par le point 0,0 et non pas par le centre de ma lumière.
    En fait si je bouge ma souris, l'ombre va grandir ou rapetisser.
    Mais il n'y a pas de rotation autour de l'objet.
    Elle va soit être projeter derrière l'objet par rapport au point 0,0, soit devant l'objet par rapport au point 0,0.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  16. #16
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 641
    Points
    7 641
    Par défaut
    Salut,

    Citation Envoyé par Pecose Voir le message
    Pour calculer le x que je cherche, je dit "coinDuCarré.getX() * (rayon/distance entre centreDuCercle et coinDuCarré)".
    C'est ca qu'il faut faire?
    Bah non... vu que tu veux tracer la ligne joignant le centre de ton ellipse à ton coinDuCarré, et vu que le centre de l'ellipse n'intervient nulle part dans ta formule, définitiviement... non.
    Ton ratio est à appliquer sur ton rayon, mais la position est absolue dans ta fenêtre, donc il faut rajouter l'origine du rayon pour avoir les bonnes coordonnées.

    Remplace tes lignes (je n'en prends qu'une pour illustrer, c'est à faire pour toutes):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t1 = new Point2D.Double(p2.getX()*(r/d2), p2.getY()*(r/d2));
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t1 = new Point2D.Double(e.getX()+(p2.getX()-e.getX())*(d2/r), e.getY()+(p2.getY()-e.getY())*(d2/r));
    ça devrait déjà faire bouger quelque chose (attention, ratio r/d2 inversé dans ta formule... comme suggéré par joel.drigo)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  17. #17
    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
    Citation Envoyé par plegat Voir le message
    Bah non... vu que tu veux tracer la ligne joignant le centre de ton ellipse à ton coinDuCarré, et vu que le centre de l'ellipse n'intervient nulle part dans ta formule, définitiviement... non.
    Ton ratio est à appliquer sur ton rayon, mais la position est absolue dans ta fenêtre, donc il faut rajouter l'origine du rayon pour avoir les bonnes coordonnées.
    Ah oui, bien vu !
    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.

  18. #18
    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
    Accessoirement @Pecose, ce tutoriel pourra t'intéresser : http://gregouar.developpez.com/tutor...dynamiques-2d/
    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.

  19. #19
    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
    J'avais déjà vu ce tuto, mais c'est du Java??? parce que j'y comprend rien.
    Par contre le code envoyer par Plegat est presque parfait mais il marche pas.
    voila ce que ca fait:
    Nom : Sans titre.png
Affichages : 126
Taille : 7,5 Ko
    Ca dessine le truc vert, alors que moi je veux dessiner le truc rouge.
    alors j'ai modifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p2.getX()+(p2.getX()-e.getX())*(d2/r)
    là ca dessine bien derrière le carré mais ca rétrécie l'ombre quand je me rapproche et ca l'agrandi quand je recule.
    Sauf que je veux faire le contraire.
    Des jours c'est facile, des jours c'est pas facile, mais c'est jamais le même jour.

  20. #20
    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
    Et avec t1 = new Point2D.Double(e.getX()+(p2.getX()-e.getX())*(r/d2), e.getY()+(p2.getY()-e.getY())*(r/d2)); ?
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Problème pour trouver les données commune dans une requête
    Par Winterrage dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/02/2008, 10h14
  2. [VB.NET][WebServices] Problème pour trouver une Assembly
    Par sleeloo dans le forum Services Web
    Réponses: 3
    Dernier message: 19/11/2006, 12h45
  3. Problème pour trouver les MAX
    Par Erakis dans le forum Requêtes
    Réponses: 5
    Dernier message: 02/05/2006, 19h58
  4. [EJB]JBoss et JNDI, problème pour trouver mes EJB
    Par shingo dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 31/12/2005, 15h14
  5. Réponses: 3
    Dernier message: 24/11/2005, 09h44

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