Programmazione/Progetti/Architettura3D/Stesura I
Versione del 3 feb 2006 alle 09:13 di Yoruno (discussione | contributi)
//Gioe
import prog.utili.Sequenza;
import java.lang.Math;
class Sfera extends Figura3D{
//CAMPI"
private double[] parametri = new double[1];"
"
//COSTRUTTORI"
/**"
Costruisce un oggetto Sfera di raggio pari a quello fornito come argomento."
@param raggio il raggio della sfera."
@throws Figura3DException quando il valore del raggio è negativo o zero."
*/ "
public Sfera(double raggio){"
parametri[0] = raggio;"
if(parametri[0] <= 0.0)"
throw new Figura3DException(""Sfera: parametro errato!"");"
}"
"
//METODI"
/**"
Restituisce i parametri dimensionali che definicono la sfera.
@return un array contenente il valore dei parametri
dimensionali.
*/
public double[] getParametri(){"
return parametri;"
}"
"
/**"
Modifica i parametri dimensionali che definicono la sfera.
@param param un array contenente i valori dei nuovi parametri.
@throws Figura3DException quando il valore di almeno uno dei
parmetri è negativo o zero.
*/
public void setParametri(double[] param){"
if(param[0] > 0.0)"
parametri = param;"
else"
throw new Figura3DException(""Sfera: parametro errato!"");"
}"
"
/**"
Restituisce il volume della sfera.
*/
public double getVolume(){"
return 4*Math.PI*Math.pow(parametri[0], 3)/3;"
}"
"
/**"
Restituisce la superficie della figura 3D.
*/
public double getSuperficie(){"
return 4*Math.PI*Math.pow(parametri[0], 2);"
}"
"
/**"
Restituisce true se la figura 3D fornita come argomento è una sfera"
ed ha raggio uguale alla sfera che esegue il metodo, false altrimenti"
*/"
public boolean equals(Figura3D altra){"
if(altra instanceof Sfera){"
Sfera sf = (Sfera) altra;"
return this.parametri[0] == sf.parametri[0];"
}"
else"
return false;"
}"
"
/**"
Restituisce true se l'oggetto fornito come argomento è una sfera"
ed ha raggio uguale alla sfera che esegue il metodo, false altrimenti"
*/"
public boolean equals(Object o){"
if(o instanceof Figura3D)"
return this.equals((Figura3D) o);"
else"
return false;"
}"
"
/**"
Restituisce una stringa che descrive la sfera."
*/"
public String toString(){"
return ""Sfera: raggio = "" + parametri[0];"
}"
}
class Cilindro extends Figura3D{
//CAMPI"
private double[] parametri = new double[2];"
"
//COSTRUTTORI"
/**"
Costruisce un oggetto cilindro con parametri pari a quelli forniti come argomento."
@throws Figura3DException quando il valore di almeno uno dei parametri"
è negativo o zero."
*/ "
public Cilindro(double raggio, double altezza){"
parametri[0] = raggio;"
parametri[1] = altezza;"
if(parametri[0] <= 0.0 || parametri[1] <= 0.0)"
throw new Figura3DException(""Cilindro: parametro errato!"");"
}"
"
//METODI"
/**"
Restituisce i parametri dimensionali che definicono il cilindro.
@return un array contenente il valore dei parametri
dimensionali.
*/
public double[] getParametri(){"
return parametri;"
}"
"
/**"
Modifica i parametri dimensionali che definicono il cilindro.
@param param un array contenente i valori dei nuovi parametri.
@throws Figura3DException quando il valore di almeno uno dei
parmetri è negativo o zero.
*/
public void setParametri(double[] param){"
if(param[0] > 0.0 && param[1] > 0.0)"
parametri = param;"
else"
throw new Figura3DException(""Cilindro: parametro errato!"");"
}"
"
/** Restituisce il volume del cilindro."
*/"
public double getVolume(){"
return Math.PI*Math.pow(parametri[0], 2)*parametri[1];"
}"
"
/** Restituisce la superficie del cilindro */"
public double getSuperficie(){"
return 2*Math.PI*parametri[0]*parametri[1];"
}"
"
/**"
Restituisce true se la figura 3D fornita come argomento è un cilindro"
ed ha i parametri uguali al cilindro che esegue il metodo, false altrimenti"
*/"
public boolean equals(Figura3D altra){"
if(altra instanceof Cilindro){"
Cilindro cil = (Cilindro) altra;"
return this.parametri[0] == cil.parametri[0] && this.parametri[1] == cil.parametri[1];"
}"
else"
return false;"
}"
"
/**"
Restituisce true se l'oggetto fornito come argomento è un cilindro"
ed ha i parametri uguali al cilindro che esegue il metodo, false altrimenti"
*/"
public boolean equals(Object o){"
if(o instanceof Figura3D)"
return this.equals((Figura3D) o);"
else"
return false;"
}"
"
/** Restituisce una stringa che descrive il cilindro */"
public String toString(){"
return ""Cilindro: raggio = "" + parametri[0] + "", altezza = "" + parametri[1];"
}"
}
class Parallelepipedo extends Figura3D{
//CAMPI"
private double[] parametri = new double[3];"
"
//COSTRUTTORI"
/**"
Costruisce un oggetto parallelepipedo con parametri pari a quelli forniti come argomento."
@throws Figura3DException quando il valore di almeno uno dei parametri"
è negativo o zero."
*/"
public Parallelepipedo(double base, double spessore, double altezza){"
parametri[0] = base;"
parametri[1] = spessore;"
parametri[2] = altezza;"
if(parametri[0] <= 0.0 || parametri[1] <= 0.0 || parametri[2] <= 0.0)"
throw new Figura3DException(""Parallelepipedo: parametro errato!"");"
}"
"
//METODI"
/**"
Restituisce i parametri dimensionali che definicono il parallelepipedo.
@return un array contenente il valore dei parametri
dimensionali.
*/
public double[] getParametri(){"
return parametri;"
}"
"
/**"
Modifica i parametri dimensionali che definicono il parallelepipedo.
@param param un array contenente i valori dei nuovi parametri.
@throws Figura3DException quando il valore di almeno uno dei
parmetri è negativo o zero.
*/
public void setParametri(double[] param){"
if(param[0] > 0.0 && param[1] > 0.0 && param[2] > 0.0)"
parametri = param;"
else"
throw new Figura3DException(""Parallelepipedo: parametro errato!"");"
}"
"
/**"
Restituisce il volume del parallelepipedo."
*/"
public double getVolume(){"
return parametri[0]*parametri[1]*parametri[2];"
}"
"
/**"
Restituisce la superficie del parallelepipedo."
*/"
public double getSuperficie(){"
return 2*(parametri[2]*(parametri[0]+parametri[1])+parametri[0]*parametri[1]);"
}"
"
/**"
Restituisce true se la figura 3D fornita come argomento è un parallelepipedo"
ed ha i parametri uguali al parallelepipedo che esegue il metodo, false altrimenti"
*/"
public boolean equals(Figura3D altra){"
if(altra instanceof Parallelepipedo){"
Parallelepipedo par = (Parallelepipedo) altra;"
return this.parametri[0] == par.parametri[0] && this.parametri[1] == par.parametri[1] && this.parametri[2] == par.parametri[2];"
}"
else"
return false;"
}"
"
/**"
Restituisce true se l'oggetto fornito come argomento è un parallelepipedo"
ed ha i parametri uguali al parallelepipedo che esegue il metodo, false altrimenti"
*/"
public boolean equals(Object o){"
if(o instanceof Figura3D)"
return this.equals((Figura3D) o);"
else"
return false;"
}"
"
/**"
Restistuisce una stringa che descrive il parallelepipedo."
*/"
public String toString(){"
return ""Parallelepipedo: latoA = "" + parametri[0] + "", latoB= "" + parametri[1] + "", altezza= "" + parametri[2];"
}"
}
class Cubo extends Figura3D{
//CAMPI"
private double[] parametri = new double[1];"
"
//COSTRUTTORI"
/**"
Costruisce un oggetto cubo con parametri pari a quelli forniti come argomento."
@throws Figura3DException quando il valore di almeno uno dei parametri"
è negativo o zero."
*/"
public Cubo(double lato){"
parametri[0] = lato;"
if(parametri[0] <= 0.0)"
throw new Figura3DException(""Cubo: parametro errato!"");"
}"
"
//METODI"
/**"
Restituisce i parametri dimensionali che definicono il cubo.
@return un array contenente il valore dei parametri
dimensionali.
*/
public double[] getParametri(){"
return parametri;"
}"
"
/**"
Modifica i parametri dimensionali che definicono il cubo.
@param param un array contenente i valori dei nuovi parametri.
@throws Figura3DException quando il valore di almeno uno dei
parmetri è negativo o zero.
*/
public void setParametri(double[] param){"
if(param[0] > 0.0)"
parametri = param;"
else"
throw new Figura3DException(""Cubo: parametro errato!"");"
}"
"
/**"
Restituisce il volume del cubo."
*/"
public double getVolume(){"
return Math.pow(parametri[0], 3);"
}"
"
/**"
Restituisce la superficie del cubo."
*/"
public double getSuperficie(){"
return 6*Math.pow(parametri[0], 2);"
}"
"
/**"
Restituisce true se la figura 3D fornita come argomento è un cubo"
ed ha i parametri uguali al cubo che esegue il metodo, false altrimenti"
*/"
public boolean equals(Figura3D altra){"
if(altra instanceof Cubo){"
Cubo cub = (Cubo) altra;"
return this.parametri[0] == cub.parametri[0];"
}"
else"
return false;"
}"
"
/**"
Restituisce true se l'oggetto fornito come argomento è un cubo"
ed ha i parametri uguali al cubo che esegue il metodo, false altrimenti"
*/"
public boolean equals(Object o){"
if(o instanceof Figura3D)"
return this.equals((Figura3D) o);"
else"
return false;"
}"
"
/**"
Restituisce una stringa che descrive il cubo."
*/"
public String toString(){"
return ""Cubo: lato = "" + parametri[0];"
}"
}
class Cono extends Figura3D{
//CAMPI"
private double[] parametri = new double[2];"
"
//COSTRUTTORI"
/**"
Costruisce un oggetto cono con parametri pari a quelli forniti come argomento."
@throws Figura3DException quando il valore di almeno uno dei parametri"
è negativo o zero."
*/"
public Cono(double raggio, double altezza){"
parametri[0] = raggio;"
parametri[1] = altezza;"
if(parametri[0] <= 0.0 || parametri[1] <= 0.0)"
throw new Figura3DException(""Cono: parametro errato!"");"
}"
"
//METODI"
/**"
Restituisce i parametri dimensionali che definicono il cono.
@return un array contenente il valore dei parametri
dimensionali.
*/
public double[] getParametri(){"
return parametri;"
}"
"
/**"
Modifica i parametri dimensionali che definicono il cono.
@param param un array contenente i valori dei nuovi parametri.
@throws Figura3DException quando il valore di almeno uno dei
parmetri è negativo o zero.
*/
public void setParametri(double[] param){"
if(param[0] > 0.0 && parametri[1] > 0.0)"
parametri = param;"
else"
throw new Figura3DException(""Cono: parametro errato!"");"
}"
"
/**"
Restituisce il volume del cubo."
*/"
public double getVolume(){"
return Math.PI*Math.pow(parametri[0], 2)*parametri[1]/3;"
}"
"
/**"
Restituisce la superficie del cubo."
*/"
public double getSuperficie(){"
return Math.PI*parametri[0]*Math.sqrt(Math.pow(parametri[0], 2)+Math.pow(parametri[1], 2));"
}"
"
/**"
Restituisce true se la figura 3D fornita come argomento è un cono"
ed ha i parametri uguali al cono che esegue il metodo, false altrimenti"
*/"
public boolean equals(Figura3D altra){"
if(altra instanceof Cono){"
Cono con = (Cono) altra;"
return this.parametri[0] == con.parametri[0] && this.parametri[1] == con.parametri[1];"
}"
else"
return false;"
}"
"
/**"
Restituisce true se l'oggetto fornito come argomento è un cono"
ed ha i parametri uguali al cono che esegue il metodo, false altrimenti"
*/"
public boolean equals(Object o){"
if(o instanceof Figura3D)"
return this.equals((Figura3D) o);"
else"
return false;"
}"
"
/**"
Restituisce una stringa che descrive il cono."
*/"
public String toString(){"
return ""Cono: raggio = "" + parametri[0] + "", altezza= "" + parametri[1];"
}"
}
class TroncoDiCono extends Figura3D{
//CAMPI"
private double[] parametri = new double[3];"
"
//COSTRUTTORI"
/**"
Costruisce un oggetto tronco di cono con parametri pari a quelli forniti come argomento."
@throws Figura3DException quando il valore di almeno uno dei parametri"
è negativo o zero."
*/"
public TroncoDiCono(double grande, double piccolo, double altezza){"
parametri[0] = grande;"
parametri[1] = piccolo;"
parametri[2] = altezza;"
if(parametri[0] <= 0.0 || parametri[1] <= 0.0 || parametri[2] <= 0.0)"
throw new Figura3DException(""Tronco di cono: parametro errato!"");"
}"
"
//METODI"
/**"
Restituisce i parametri dimensionali che definicono il tronco di cono.
@return un array contenente il valore dei parametri
dimensionali.
*/
public double[] getParametri(){"
return parametri;"
}"
"
/**"
Modifica i parametri dimensionali che definicono il tronco di cono.
@param param un array contenente i valori dei nuovi parametri.
@throws Figura3DException quando il valore di almeno uno dei
parmetri è negativo o zero.
*/
public void setParametri(double[] param){"
if(param[0] > 0.0 && param[1] > 0.0 && param[2] > 0.0)"
parametri = param;"
else"
throw new Figura3DException(""Tronco di cono: parametro errato!"");"
}"
"
/**"
Restituisce il volume del tronco di cono."
*/"
public double getVolume(){"
return Math.PI/3*(parametri[0]*parametri[1]+Math.pow(parametri[0], 2)+Math.pow(parametri[1], 2))*parametri[2];"
}"
"
/**"
Restituisce la superficie del tronco di cono."
*/"
public double getSuperficie(){"
return Math.PI*(parametri[0]+parametri[1])*Math.sqrt(Math.pow(parametri[0]-parametri[1], 2)+Math.pow(parametri[2], 2));"
}"
"
/**"
Restituisce true se la figura 3D fornita come argomento è un tronco di cono"
ed ha i parametri uguali al tronco di cono che esegue il metodo, false altrimenti"
*/"
public boolean equals(Figura3D altra){"
if(altra instanceof TroncoDiCono){"
TroncoDiCono tdc = (TroncoDiCono) altra;"
return this.parametri[0] == tdc.parametri[0] && this.parametri[1] == tdc.parametri[1] && this.parametri[2] == tdc.parametri[2];"
}"
else"
return false;"
}"
"
/**"
Restituisce true se l'oggetto fornito come argomento è un tronco di cono"
ed ha i parametri uguali al tronco di cono che esegue il metodo, false altrimenti"
*/"
public boolean equals(Object o){"
if(o instanceof Figura3D)"
return this.equals((Figura3D) o);"
else"
return false;"
}"
"
/**"
Restituisce una stringa che descrive il tronco di cono."
*/"
public String toString(){"
return ""Tronco di cono: raggio grande= "" + parametri[0] + "", raggio piccolo= "" + parametri[1] + "", altezza= "" + parametri[2];"
}"
"
}
/**
Segnala una figura 3d contenenteparametri minori o uguali a zero.
*/
class Figura3DException extends RuntimeException{
public Figura3DException(){"
super();"
}"
"
public Figura3DException(String messaggio){"
super(messaggio);"
}"
}
class Architettura3D{
"
//CAMPI"
private Sequenza seq;"
"
//COSTRUTTORI"
/**"
Costruisce un'Architettura 3d vuota."
*/"
public Architettura3D(){"
seq = new Sequenza();"
}"
"
//METODI"
/**"
Aggiunge la figura 3D fornita come argomento in un insieme."
*/"
public void addFigura3D(Figura3D figura){"
seq.add(figura);"
}"
"
/**"
Restituisce un array contenente le figure 3D inserite dal metodo"
addFigura3D(Figura3D figura)
."
*/"
public Figura3D[] getFigure3D(){"
Object[] array = seq.toArray();"
Figura3D[] fig = new Figura3D[array.length];"
for(int i = 0; i < array.length; i++){"
fig[i] = (Figura3D) array[i];"
}"
return fig;"
}"
"
/**"
Restituisce la somma dei volumi di tutte le figure 3D del tipo specificato come argomento:"
- ""SC"" per Sfere e cilindri."
- ""PC"" per Parallelepipedi e cubi."
- ""TC"" per Coni e Tronchi di cono."
- ""TUTTE"" per tutti i tipi di figure 3D."
@throws TipoNonPrevistoException quando l'argomento è diverso dalle stringhe sopracitate."
*/"
public double getVolume(String tipoFigura) throws TipoNonPrevistoException{"
double volumi = 0.0;"
if(tipoFigura.equals(""SC"")){ //Sfere e Cilindri"
Figura3D[] array = this. getFigure3D();"
for(int i = 0; i< array.length; i++){"
if(array[i] instanceof Sfera){"
Sfera sfera = (Sfera) array[i];"
volumi = volumi + sfera.getVolume();"
}"
else if(array[i] instanceof Cilindro){"
Cilindro cilindro = (Cilindro) array[i];"
volumi = volumi + cilindro.getVolume();"
}"
}"
}"
else if(tipoFigura.equals(""PC"")){ //Parallelepipedi e Cubi"
Figura3D[] array = this. getFigure3D();"
for(int i = 0; i< array.length; i++){"
if(array[i] instanceof Parallelepipedo){"
Parallelepipedo para = (Parallelepipedo) array[i];"
volumi = volumi + para.getVolume();"
}"
else if(array[i] instanceof Cubo){"
Cubo cubo = (Cubo) array[i];"
volumi = volumi + cubo.getVolume();"
}"
}"
}"
else if(tipoFigura.equals(""TC"")){ //Coni e tronchi di cono"
Figura3D[] array = this. getFigure3D();"
for(int i = 0; i< array.length; i++){"
if(array[i] instanceof TroncoDiCono){"
TroncoDiCono tronco = (TroncoDiCono) array[i];"
volumi = volumi + tronco.getVolume();"
}"
else if(array[i] instanceof Cono){"
Cono cono = (Cono) array[i];"
volumi = volumi + cono.getVolume();"
}"
}"
}"
"
else if(tipoFigura.equals(""TUTTE"")){ //Tutte le figure (riscorsivo)"
volumi = this.getVolume(""SC"")+this.getVolume(""PC"")+this.getVolume(""TC"");"
}"
else{"
throw new TipoNonPrevistoException(""Il tipo "" + tipoFigura + "" non e' previsto!"");"
}"
return volumi;"
}"
"
/**"
Restituisce la somma delle superficie di tutte le figure 3D del tipo specificato come argomento:"
- ""SC"" per Sfere e cilindri."
- ""PC"" per Parallelepipedi e cubi."
- ""TC"" per Coni e Tronchi di cono."
- ""TUTTE"" per tutti i tipi di figure 3D."
@throws TipoNonPrevistoException quando l'argomento è diverso dalle stringhe sopracitate."
*/"
public double getSuperficie(String tipoFigura) throws TipoNonPrevistoException{"
double superficie = 0.0;"
if(tipoFigura.equals(""SC"")){ //Sfere e Cilindri"
Figura3D[] array = this. getFigure3D();"
for(int i = 0; i< array.length; i++){"
if(array[i] instanceof Sfera){"
Sfera sfera = (Sfera) array[i];"
superficie = superficie + sfera.getSuperficie();"
}"
else if(array[i] instanceof Cilindro){"
Cilindro cilindro = (Cilindro) array[i];"
superficie = superficie + cilindro.getSuperficie();"
}"
}"
}"
else if(tipoFigura.equals(""PC"")){ //Parallelepipedi e Cubi"
Figura3D[] array = this. getFigure3D();"
for(int i = 0; i< array.length; i++){"
if(array[i] instanceof Parallelepipedo){"
Parallelepipedo para = (Parallelepipedo) array[i];"
superficie = superficie + para.getSuperficie();"
}"
else if(array[i] instanceof Cubo){"
Cubo cubo = (Cubo) array[i];"
superficie = superficie + cubo.getSuperficie();"
}"
}"
}"
else if(tipoFigura.equals(""TC"")){ //Coni e Trinchi di cono."
Figura3D[] array = this. getFigure3D();"
for(int i = 0; i< array.length; i++){"
if(array[i] instanceof TroncoDiCono){"
TroncoDiCono tronco = (TroncoDiCono) array[i];"
superficie = superficie + tronco.getSuperficie();"
}"
else if(array[i] instanceof Cono){"
Cono cono = (Cono) array[i];"
superficie = superficie + cono.getSuperficie();"
}"
}"
}"
else if(tipoFigura.equals(""TUTTE"")){ //Tutte le figure3d (ricorsivo)"
superficie = this.getSuperficie(""SC"")+this.getSuperficie(""PC"")+this.getSuperficie(""TC"");"
}"
else{"
throw new TipoNonPrevistoException(""Il tipo "" + tipoFigura + "" non e' previsto!"");"
}"
return superficie;"
}"
"
/**"
Restituisce il volume medio di tutte le figure 3D."
*/"
public double getVolumeMedio() throws TipoNonPrevistoException{"
return this.getVolume(""TUTTE"")/seq.size();"
}"
"
/**"
Restituisce la superficie media di tutte le figure 3D."
*/"
public double getSuperficieMedia() throws TipoNonPrevistoException{"
return this.getSuperficie(""TUTTE"")/seq.size();"
}"
"
/**"
Restituisce la Figura3D fornita come argomento se è presente nell'insieme, null altrimenti."
*/"
public Figura3D trova(Figura3D fig){"
Figura3D ritorno = null;"
if(fig instanceof Sfera){ //se è una sfera"
ritorno = (Sfera) seq.find((Sfera) fig);"
}"
else if(fig instanceof Cilindro){ //se è un cilindro"
ritorno = (Cilindro) seq.find((Cilindro) fig);"
}"
else if(fig instanceof Parallelepipedo){ //se è un parallelepipedo"
ritorno = (Parallelepipedo) seq.find((Parallelepipedo) fig);"
}"
else if(fig instanceof Cubo){ //se è un cubo"
ritorno = (Cubo) seq.find((Cubo) fig);"
}"
else if(fig instanceof Cono){ //se è un cono"
ritorno = (Cono) seq.find((Cono) fig);"
}"
else if(fig instanceof TroncoDiCono){ //se è un tronco di cono"
ritorno = (TroncoDiCono) seq.find((TroncoDiCono) fig);"
}"
return ritorno; "
}"
}
/**
Segnala un tipo di Figura3D non previsto.
*/
class TipoNonPrevistoException extends Exception{
public TipoNonPrevistoException(){"
super();"
}"
"
public TipoNonPrevistoException(String messaggio){"
super(messaggio);"
}"
}