10/07/07 9:11
Allora.. ho un piccolo quesito da porvi come nuovo utente.. non so se potete darmi una mano..
allora.. io ho questo codice qui:
senza che copiate e incolliate, vi dico sin da ora che al click del mouse viene creato una specie di pianeta con dei satelliti a distanza, dimensione, velocità di rotazione e verso casuali..
ora.. come potete notare, il programma è semplice, non utilizzo niente di particolarmente comlicato..
ma mi servirebbe di modificarne l'aspetto grafico finale, inserendo in una finestra che posso far apparire a scelta, un'anteprima di dimensioni ridotte di ciò che succede nella finestra dell'applicazione..
mi hanno detto che posso utilizzare la classe BufferedImage e le trasformazioni affini (AffineTransform) per applicare il ridimensionamento dell'elemento passato come BufferedImage..
se potete darmi una mano.. ve ne sarei grato..
io non ho idea di come fare (soprattutto xké nelle API della java-documentation non sono riuscito a trovare le funzioni che avrei potuto usare in nessuno dei due casi -AffineTransform e BufferedImage-).
bye.. W3B
allora.. io ho questo codice qui:
import java.util.*; import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import javax.swing.event.*; public class SphereOrbit extends JPanel implements Runnable { JFrame f; Thread t = null; ArrayList palle; double angle = 0; public SphereOrbit() { f = new JFrame(); palle = new ArrayList(); creaFinestra(); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { palle.add(new OrbitElement(e.getX(), e.getY())); } }); avvia(); } public void creaFinestra() { f.setSize(400, 400); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.getContentPane().add(this); f.setVisible(true); } public void paint(Graphics _g) { super.paintComponent(_g); Graphics2D g = (Graphics2D)_g; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); disegnaPalle(g); } public void disegnaPalle(Graphics2D g) { setBackground(Color.BLACK); if (palle.size() > 0) { for (int i=0; i<palle.size(); i++) { OrbitElement p = (OrbitElement)palle.get(i); Ellipse2D pianeta = new Ellipse2D.Double(p.x-p.dimpianeta, p.y-p.dimpianeta, p.dimpianeta*2, p.dimpianeta*2); g.setColor(p.pianeta); g.fill(pianeta); for (int W=0; W<p.numsatelliti; W++) { int x = (int)(Math.sin(Math.toRadians(angle*p.angle[W]*p.verso[W])) * p.ray[W]); int y = (int)(Math.cos(Math.toRadians(angle*p.angle[W]*p.verso[W])) * p.ray[W]); Ellipse2D satellite = new Ellipse2D.Double(p.x + x-p.dimsatellite[W]/2, p.y + y-p.dimsatellite[W]/2, p.dimsatellite[W], p.dimsatellite[W]); g.setColor(p.satellite[W]); g.fill(satellite); } } } } public void run() { while( t != null) { try { angle++; t.sleep(10); repaint(); } catch (InterruptedException e) {} } } public void avvia() { if (t == null) { t = new Thread(this); t.start(); } } public static void main(String[] argv) { SphereOrbit so = new SphereOrbit(); } } class OrbitElement { int numsatelliti = (int)(Math.random()*5)+1; double dimpianeta; double[] dimsatellite = new double[numsatelliti]; double[] ray = new double[numsatelliti]; double[] angle = new double[numsatelliti]; double[] verso = new double[numsatelliti]; int x, y; Color pianeta; Color[] satellite = new Color[numsatelliti]; public OrbitElement(int x, int y) { this.x = x; this.y = y; dimpianeta = (Math.random() * 10) + 10; pianeta = new Color((int)(Math.random()*255) ,(int)(Math.random()*255) ,(int)(Math.random()*255)); for (int i=0; i<numsatelliti; i++) { ray[i] = (Math.random() * 60) + dimpianeta; angle[i] = Math.random() * 2 + 1; verso[i] = 1; if (Math.random() > Math.random()) { verso[i]*=(-1); } //satellite[i] = new Color(255-pianeta.getGreen(), 255-pianeta.getBlue(), 255-pianeta.getRed()); satellite[i] = new Color((int)(Math.random()*255), (int)(Math.random()*255), (int)(Math.random()*255)); dimsatellite[i] = (Math.random() * 15) + 3; } } }
senza che copiate e incolliate, vi dico sin da ora che al click del mouse viene creato una specie di pianeta con dei satelliti a distanza, dimensione, velocità di rotazione e verso casuali..
ora.. come potete notare, il programma è semplice, non utilizzo niente di particolarmente comlicato..
ma mi servirebbe di modificarne l'aspetto grafico finale, inserendo in una finestra che posso far apparire a scelta, un'anteprima di dimensioni ridotte di ciò che succede nella finestra dell'applicazione..
mi hanno detto che posso utilizzare la classe BufferedImage e le trasformazioni affini (AffineTransform) per applicare il ridimensionamento dell'elemento passato come BufferedImage..
se potete darmi una mano.. ve ne sarei grato..
io non ho idea di come fare (soprattutto xké nelle API della java-documentation non sono riuscito a trovare le funzioni che avrei potuto usare in nessuno dei due casi -AffineTransform e BufferedImage-).
bye.. W3B