venerdì 23 gennaio 2009

Ho trovato l'errore dell'esercizio fatto in classe: retta parallela ad una data passante per il punto cliccato

public void tracciaParallela(){


double m=((double)y2-(double)y1)/((double)x2-(double)x1);

yy1=(int) (m*( xx1- cPoint.x)+ cPoint.y);

yy2=(int) (m*( xx2- cPoint.x)+ cPoint.y);

}
Questa è la soluzione corretta. In cosa differisce da quanto scritto in classe ? Addirittura c'erano due errori ! 1)il coefficiente angolare m veniva uguale a zero! Perchè ? m=(y2-y1)/(x2-x1), essendo le variabili tutte definite di tipo intero, il rapporto tra due grandezze intere viene arrotondato a numero intero e siccome il risultato è un numero decimale inferiore a zero, lo approssima a zero! Questo prima problema si risolve facendo il casting di y1,y2,x1,x2 con (double). Ma non finisce qui. C'è un secondo errore. 2) nel calcolo di yy1 e yy2 l'istruzione scritta in classe era
yy1= (int) m*(xx1-cPoint.x)+cPoint.y;
Il casting (int) agisce solo sul primo fattore m*(xx1-cPoint.c), che diabolicamente è ancora m! per cui me lo azzera nuovamente. Pertanto la soluzione sta nel racchiudere tutta l'espressione al secondo membro tra le parentesi tonde. E ora funziona.

Nessun commento: