Probleme de précision avec les tracés java2D

Probleme de précision avec les tracés java2D - Java - Programmation

Marsh Posté le 24-07-2005 à 17:46:09    

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.
Pour l'instant je cherche juste à tracer le rayon lumineux jusqu'à ce qu'il rencontre un cercle. Pas de probleme pour les calculs pour trouver la première intersection, mais lorsque je fait un zoom sur le tracé, le rayon rentre dans le cercle.
Je vous donne une partie du code :
 

Code :
  1. public void paint(Graphics g){
  2.        Graphics2D g2D=(Graphics2D)g;
  3.        g2D.setRenderingHint(java.awt.RenderingHints.KEY_STROKE_CONTROL,java.awt.RenderingHints.VALUE_STROKE_PURE);
  4.        g2D.scale(theApp.getModel().GetZoom(),theApp.getModel().GetZoom());
  5.        Stroke s = new BasicStroke((float)(1/theApp.getModel().GetZoom()),BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
  6.        Stroke ini=g2D.getStroke();
  7.        g2D.setStroke(s);
  8.        Arc2D.Double cercle1=new Arc2D.Double(200,400,200,200,0,360,java.awt.geom.Arc2D.OPEN);
  9.        System.out.println(cercle1.contains(202.020410288672,520));
  10.        Line2D.Double r2=new Line2D.Double(0,520, 202.020410288672,520);
  11.        g2D.draw(cercle1);
  12.        g2D.draw(r2);
  13.        g2D.setStroke(ini);
  14.    }


 
System.out.println(cercle1.contains(202.020410288672,520)); me donne false et pourtant le rayon r2 rentre à l'intérieur du cercle1!! (ça se voit à partir d'un zoom *100)
Voilà un screenshot en zoom *500 :
http://vanvincq.chez.tiscali.fr/intersection.jpg
Est-ce que quelqu'un peut m'aider? Merci.
 
 

Reply

Marsh Posté le 24-07-2005 à 17:46:09   

Reply

Marsh Posté le 25-07-2005 à 11:55:08    

J'ai enlevé le scale en multipliant tout par 500. et j'ai enlevé quelques chiffres en croyant que j'avais peut-être atteint la limite de précision du double...

Code :
  1. Stroke s = new BasicStroke((float)(1/theApp.getModel().GetZoom()),BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
  2. Stroke ini=g2D.getStroke();
  3. g2D.setStroke(s);
  4. Arc2D.Double cercle1=new Arc2D.Double(100000,200000,100000,100000,0,360,java.awt.geom.Arc2D.CHORD);
  5. System.out.println(cercle1.contains(101010,260000));
  6. Line2D.Double r2=new Line2D.Double(0,260000, 101010,260000);
  7. g2D.setStroke(s);
  8. g2D.draw(cercle1);
  9. g2D.draw(r2);
  10. g2D.setStroke(ini);


Et c'est toujours pareil, le point final de r2 n'appartient pas au cercle 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.

Reply

Marsh Posté le 27-07-2005 à 17:07:00    

Bon, à priori c'est un bug connu de java : http://bugs.sun.com/bugdatabase/vi [...] id=4265778

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed