Paolo Boldi
Problemi per la lezione del 19/12
- [Interfaccia Comparable (I)] Vogliamo rendere la classe Persona comparabile, confrontando
due persone sulla base della loro età (cioè, definendo una persona ≤ di un'altra se e solo se la sua età lo è). Fate in modo che la
classe implementi l'interfaccia Comparable<Persona> e sperimentatela, realizzando un metodo main in cui vengono letti i dati
di un certo numero di persone, vengono inseriti in un array e l'array viene ordinato usando il metodo sort
di java.util.Arrays..
- [Interfaccia Comparable (II)] Riprendete la classe Punto realizzata qualche giorno
fa e rendetela comparabile, definendo un punto p minore di un punto p' se e solo se p ha modulo (distanza dall'origine) minore di p'.
Questa relazione rispetta il contratto definito dall'interfaccia? (Consultate la documentazione delle API per decidere)
In caso affermativo, realizzate un main di prova che ordini un array di punti e guardate come vengono ordinati.
- [Classe Quadratica] Implementate una classe di nome Quadratica che rappresenta una funzione f(x) di secondo grado sui numeri reali, caratterizzata quindi dai tre coefficienti a, b e
c. Questa sfrutterà la classe Punto realizzata nella lezione precedente.
La classe deve avere i seguenti costruttori e metodi:
- Quadratica(double a, double b, double c) crea una funzione con i coefficienti specificati.
- Quadratica(double a, double b) crea una funzione con il termine noto nullo
- Quadratica(double a) crea una funzione con solo il termine a(x^2)
- String toString(): restituisce una rappresentazione testuale della funzione, del tipo "2x^2 - 3".
- boolean equals(Object q): restituisce true sse i due oggetti rappresentano la medesima curva.
- Punto getIntersectionWithYAxis(): restituisce l'oggetto di tipo Punto che rappresenta l'intersezione tra la curva e l'asse Y.
- Punto[] getIntersectionWithXAxis(): restituisce un array di oggetti di tipo Punto, che rappresentano tutte le intersezioni tra la curva e l'asse X, ordinate per ascissa crescente. Suggerimento: riguardare il codice scritto per l'esercizio EquazioneSecondoGrado nella lezione del 19 Ottobre.
- double getYOf(double x): resituisce l'ordinata corrispondente all'ascissa data, per questa funzione.
- Punto getVertex(): restituisce il massimo o il minimo della funzione (a seconda che questa sia concava o convessa). Ricordiamo che questo ha ascissa pari a (-b / (2a) ). Suggerimento: sfruttate il metodo getYOf(x)
- boolean isAbove(Punto p): restituisce true sse questa curva si trova sopra il punto p.
- boolean isBelow(Punto p): restituisce true sse questa curva si trova sotto il punto p.
- boolean isIncluding(Punto p): restituisce true sse questa curva comprende il punto p.
- [Classe Proiettile] Implementate una classe di nome Proiettile che rappresenta un proiettile lanciato verso l'alto, con un certo angolo theta rispetto al terreno e una certa velocità iniziale v. Tra i propri attributi, vogliamo che contenga un oggetto Quadratica che rappresenta la funzione della traiettoria del proiettile in uno spazio bidimensionale. Ricordiamo infatti che questa equazione ha coefficienti
- a = -g / (2 * v^2 * cos(theta)^2)
- b = tan(theta)
- c = 0
dove g = 9.8 approssima l'accelerazione gravitazionale. La classe deve avere i seguenti costruttori e metodi:
- Proiettile(double theta, double v) Rappresenta un proiettile lanciato con angolo theta rispetto al terreno e velocità iniziale v.
- String toString(): restituisce una rappresentazione testuale di questo proiettile, tipo "Proiettile con traiettoria 2x^2 + 5x".
- boolean equals(Object p): restituisce true sse i due oggetti rappresentano proiettili con identica traiettoria nel piano cartesiano.
- Punto getMaximumHeightPoint(): restituisce il punto del piano cartesiano dove questo proiettile raggiunge altezza massima.
- Punto getLandingPoint(): restituisce il punto del piano dove questo proiettile tocca il terreno.
- boolean isHitting(Punto p): resituisce true sse il proiettile colpisce quel punto (quindi, se il punto è nella sua traiettoria, sopra il terreno e nella direzione giusta).
Sperimentate la classe, realizzando un programma che mi dica che se un proiettile lanciato a 45 gradi d'inclinazione a 82 metri al secondo può colpire un obiettivo posto sul terreno a 690 metri da noi largo 10 metri.
Suggerimento: sfruttate il metodo getRho() della classe Punto.
[Nota: la distanza di circa 690 metri è, per uno strano caso, la stessa che separa la sede di Matematica da quella di ingegneria matematica e informatica]