Beh , in fondo mi sembra la tecnica dei raggi di cui ti parlavo…è ovvio che per ellissi molto schiacciate o allungate la precisione può crollare (o per figure irregolari), d’altro canto per cerchi perfetti è della massima precisione.
Ti suggerisco però (a meno che non ti piaccia farti i tutto in casa) di usare metodi e classi già esistenti , per questa tecnica la classe geom ti aiuta tantissimo.
Guarda questo esempio , come è facile calcolare la distanza senza ricorrere a sistemi di equazioni.
codice:
import java.awt.*;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;
class TestGeom {
public final int DIAMETRO=100;
private int inc=0;
private boolean toccato=false;
private Ellipse2D.Double e1=new Ellipse2D.Double();
private Ellipse2D.Double e2=new Ellipse2D.Double();
private JFrame frame=new JFrame();
private Pannello pannello=new Pannello();
public static void main(String[] a){
TestGeom t=new TestGeom();
}
public TestGeom(){
frame.setSize(700,600);
frame.getContentPane().add(pannello);
frame.show();
}
class Pannello extends JPanel{
ThreadAnim anim=new ThreadAnim();
public Pannello(){
anim.start();
}
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D)g;
super.paintComponent(g2);
e1.setFrame(inc,inc,DIAMETRO,DIAMETRO);
e2.setFrame(300-inc,300-inc,DIAMETRO,DIAMETRO);
g2.fill(e1);
g2.fill(e2);
double x1 =e1.getCenterX();
double y1 =e1.getCenterY();
double x2 =e2.getCenterX();
double y2 =e2.getCenterY();
Point2D.Double p1=new Point2D.Double(x1,y1);
Point2D.Double p2=new Point2D.Double(x2,y2);
double distanza=p1.distance(p2);
if(distanza<DIAMETRO){
toccato=true;
}
}
}
class ThreadAnim extends Thread{
public void run(){
while(!toccato){
try {
pannello.repaint();
Thread.sleep(40);
inc++;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
JOptionPane.showMessageDialog(null,"Collisione");
}
}
}