Newsgroup: it.comp.java
Titolo: Coniche

Sono una programmatrice java alle prime armi e sono disperata perché
devo fare un programma entro fine mese(altrimenti il prof. mi annulla
l'esame) che data una conica(ellisse,parabola,iperbole) di equazione
generica ax^2+bxy+cy^2+dx+ey+f=0 ne disegni il grafico e poi lo si
possa ruotare,traslare e scalare.Avevo pensato di creare un' array di
punti scorrendo l' asse x(limitato al mio pannello) e calcolando le
y.Il problema che non riesco a risolvere è quello di ordinare l' array
in modo che,unendo poi i punti,il disegno venga corretto.Vi prego se
avete una soluzione o un'idea migliore di quella che sto tentando di
realizzare,aiutatemi perché ho penato un sacco per passare scritto e
orale di questo esame e sarebbe molto deprimente dover ricominciare da
capo.

Io non sono particolarmente ferrato in matematica, ma posso dirti che
generalmente tutto quello che vuoi fare tu si risolve con delle matrici,
dove vengono inseriti gli array relativi agli assi x,y,z.
L grafica 3D funziona cosě, se la vuoi su un solo piano assumi z=0.
Se vuoi un cosiglio, cerca su google il calcolo per la rotazione di oggetti
3d, ancora meglio se vai su: "it.comp.giochi.sviluppo" e ti fai dare una
mano da loro.



un metodo potrebbe essere questo
ti ricavi le coordinate del centro
la lunghezza dei semiassi dell'ellisse 
l'angolo di rotazione di uno dei due semiassi
double xc = x del centro 
double yc = y del centro 
double a = lunghezza primo semiasse 
double b = lunghezza secondo semiasse 
double r = angolo di rotazione
imposti un fattore di scala
double s = 10;
imposti il centro del disegno
int ox = width / 2;
int oy = height / 2;
usi la funzione Graphics.drawArc(...) per disegnare l'ellisse
//converti le coordinate del piano in coordinate del display
int x = (int)Math.rint(xc * s) + ox;
int y = oy - (int)Math.rint(yc * s);
int la = (int)Math.rint(2 * a * s);
int lb = (int)Math.rint(2 * b * s);
g.drawGraphics(x,y,a,b,0,360);
usi la funzione Graphics2D.rotate(...) per ruotare l'ellisse
usi le altri funzioni della classe Graphics2D per ruotare
scalare e traslare l'ellisse in funzione degli eventi di input
un altro metodo potrebbe essere questo
passi ad una rappresentazione parametrica dell'ellisse
double xp = a * Math.cos(t) + xc;
double yp = b * Math.sin(t) + yc;
con t che varia tra 0 e 2 * Math.PI
double dt = 2 * Math.PI / 100;
double t = 0;
double[] X = new double[100];
double[] Y = new double[100];
for (int i = 0; i < 100; i++)
{
	t += dt;
	X[i] = a * Math.cos(t) + xc;
	Y[i] = b * Math.sin(t) + yc;
}
disegni l'ellisse con un ciclo 
int xp = (int)Math.rint((Math.cos(r) * X[0] - Math.sin(r) * Y[0]) * s) + ox;
int yp = oy - (int)Math.rint((Math.sin(r) * X[0] + Math.cos(r) * Y[0]) * s) ;
for (int i = 1; i < 100; i++)
{
	int xq = (int)Math.rint((Math.cos(r) * X[i] - Math.sin(r) * Y[i]) * s) + ox;
	int yq = oy - (int)Math.rint((Math.sin(r) * X[i] + Math.cos(r) * Y[i] ) * s) ;
	g.drawLine(xp,yp,xq,yq);
	xp = xq;
	yp = yq;
}
oppure usi Graphics.drawPolygon(...)
int[] PX = new int[100];
int[] PY = new int[100];
for (int i = 0; i < 100; i++)
{
	PX[i] = (int)Math.rint((Math.cos(r) * X[i] - Math.sin(r) * Y[i]) * s) + ox;
	PY[i] = oy - (int)Math.rint((Math.sin(r) * X[i] + Math.cos(r) * Y[i]) * s) ;
}
g.drawPolygon(PX,PY,100);
per ruotare, scalare e traslare l'ellisse modifichi i parametri ox, oy, s e r
conclusione
l'equazione  generale dell'ellisse non e' adatta per disegnare l'ellisse
devi ricavarti centro, dimensioni e angolo di rotazione
ciao_O
_______________________________________
http://jame.sourceforge.net
 
[ last release jame4.2e ]
_______________________________________
http://digilander.iol.it/schiele

>l'esame) che data una conica(ellisse,parabola,iperbole) di equazione
scusa, mi sono fissato con l'ellisse e ho dimenticato le altre coniche


I (sinceri) miei complimenti
Giuseppe