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 :

[java2D] Probleme de précision de tracé


Sujet :

2D Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut [java2D] Probleme de précision de tracé
    Bonjour,
    j'essaye de faire un programme (le premier) avec des tracés de rayons lumineux et avec lequel je voudrai faire des zooms assez importants (d'où l'utilisation de chiffres assez grands).
    Pour l'instant je cherche juste à tracer le rayon lumineux jusqu'à ce qu'il rencontre un cercle.
    Voilà le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        * Graphics2D g2D=(Graphics2D)g;
        * g2D.setRenderingHint(java.awt.RenderingHints.KEY_STROKE_CONTROL,java.awt.RenderingHints.VALUE_STROKE_PURE);
        * Stroke s = new BasicStroke(1.0f,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
        * Stroke ini=g2D.getStroke();
        * g2D.setStroke(s);
        * Arc2D.Double cercle1=new Arc2D.Double(100000,200000,100000,100000,0,360,java.awt.geom.Arc2D.CHORD);
        * System.out.println(cercle1.contains(101010,260000));
        * Line2D.Double r2=new Line2D.Double(0,260000, 101010,260000);
        * g2D.setStroke(s);
        * g2D.draw(cercle1);
        * g2D.draw(r2);
        * g2D.setStroke(ini);
    Le point final de r2 n'appartient pas au cercle (le println renvoit false) et pourtant r2 rentre dans le cercle :

    Je ne comprends vraiment rien, je fais peut-être une grosse erreur, mais je ne vois vraiment pas.
    Merci d'avance pour vos réponses.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Juste une question bete mais tu est sur que le point dintersection est 101010,260000?
    Et du principe purement logique il y a une difference entre Cercle et disque.
    (Désolé pour mes remarques mais en plus je peux pas charger ton dessin... alors je fais ce que je peux. EDIT : car j'ai un acces limité à internet, donc merci pour l'url mais je peux rien en faire... )

    PS : Si j'ai bien compris tu a un segment de droite commançant à l'exterieur du cercle et finissant à l'interieur?

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci pour ta réponse.
    Voici l'adresse de l'image : http://vanvincq.chez.tiscali.fr/intersection.jpg
    Oui, le point est bien en dehors du cercle car l'intersection de la droite avec le cercle est de 101010.2...,260000 et de plus le println renvoit false ce qui veut bien dire que le point se situe en dehors de l'aire délimitée par le cercle.
    Et la droite commence à l'extérieur du cercle et finit à l'intérieur alors qu'elle ne devrait pas...

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Tu voudrais que la droite s'arrête à la rencontre du cercle ?
    Si c'est la cas, ça ne marche pas en l'état car avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Line2D.Double r2=new Line2D.Double(0,260000, 101010,260000);
    ta droite part bien du point 101010,260000 situé en dehors du cercle, mais va jusqu'au point 0,260000, situé à l'intérieur du cercle.
    Change le 0 en 101010.2...

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Non, le point 0,26000 est bien en dehors du cercle, il en est meme très loin (du coté gauche)...
    Ce qui pose probleme c'est l'intersection, j'ai fait un calcul exact à l'ordonnée 26000 et ça donne 101010.205 (etc...). J'ai rentré ce résultat comme abscisse du point final de r2 et ça rentrait dans le cercle. j'ai donc essayé avec une abscisse plus petite : 101010 pour être sur d'être en à l'extérieur et pourtant r2 finit à l'intérieur du cercle.

    Si je mets 101010.3, le println me renvoie true et si je mets 101010.2, il me renvoit false donc mon calcul d'intersection est bon et même si je mets 101005, r2 rentre encore à l'intérieur du cercle...
    Je suis perdu...

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    petit up désespéré...

  7. #7
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    J'ai reproduit le problème, je n'ai pas vraiment d'explication à part la précision peut-être... Tu as vraiment besoin de gérer des tailles de composants aussi importantes ?

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup, au moins je sais maintenant que ça ne fait pas ça que chez moi!
    En fait au départ mes composants ont des tailles normales de l'ordre de 200 à 300 pixels, mais j'ai ensuite besoin de pouvoir faire un zoom assez important (environ *500) pour voir les abérrations d'un objectif constitué de plusieurs lentilles.
    J'avais donc le probleme en faisant un scale(500,500), alors je me suis dit qu'il y avait un probleme avec le scale. J'ai donc tout mulitplié directement par 500 et toujours le meme probleme...
    Pourtant tout est défini avec une précision de double et en plus la taille du g2D est défini avec deux int donc je suis très loin du maximum avec mon 101010*260000...
    C'est très bête car j'ai déjà passé beaucoup de temps sur ce programme, et cette histoire de zoom gache tout car le programme ne sert à rien sans le zoom...

  9. #9
    Membre habitué

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2002
    Messages : 125
    Points : 150
    Points
    150
    Par défaut
    tu as essayé le SVG avec l'API Batik ?

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Bon, à priori c'est un bug connu de java : http://bugs.sun.com/bugdatabase/view...bug_id=4265778
    Je vais regardé Batik.
    Merci.

Discussions similaires

  1. Gtk::DrawingArea et Gdk::Pixbuf, probleme de précision.
    Par Forseti dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 06/03/2012, 14h19
  2. Probleme de précision
    Par Gualino dans le forum VB.NET
    Réponses: 13
    Dernier message: 16/10/2011, 01h05
  3. Problem Avec Java2D rotate() et translate()
    Par marshallMe dans le forum 2D
    Réponses: 2
    Dernier message: 06/08/2010, 18h31
  4. Probleme de Tracé 2d
    Par boudoula dans le forum MATLAB
    Réponses: 1
    Dernier message: 10/01/2008, 22h23
  5. Probleme de précision
    Par gil38 dans le forum C++
    Réponses: 8
    Dernier message: 13/03/2007, 16h46

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