Visualizzazione dei risultati da 1 a 2 su 2

Discussione: Ragazzi aiutatemi!!!

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2009
    Messaggi
    1

    Ragazzi aiutatemi!!!

    Buon pomeriggio a tutti! vorrei avere un aiuto, se è possibile: io ho un'applet da risolvere che consiste nel disegnare i punti da coordinate lette da un file, e con il cursore del mouse tracciare un segmento (ed eventualmente cliccare sugli estremi per spostarlo) e nello stesso tempo i punti più vicini si colorano di rosso, quelli medi di giallo, ed infine quelli più lontani di verde (con soglie a piacere! io ho messo rispettivamente "<50", "<100" e ">=100", nel metodo paint).
    Il mio professore mi ha messo davanti un problema: mettendo una coordinata grandissima ovviamente i punti si adattano all'interno dell'applet (con dimensione 750x450), ma lui vuole (giustamente!) che anche la distanza tra il segmento e il punto sia proporzionato (anche nel colorarsi)...è proprio questo che non riesco a risolvere!!!! Lui mi ha suggerito di prendere Xmin e Xmax e trasformarle nell'intervallo (preso da weidth=750) come 650, in modo che ho una distanza dai bordi di 50 e 50, cosi anche Ymin e Ymax e quindi risolvere un sistema di disequazione che sia : a*Xmin+b>=50
    a*Xmax+b<=700
    a*Ymin+c>=50
    a*Ymax+c<=400

    dove "a" è uguale per tutti, mentre "b" è relativo alle ascisse e "c" relativo alle ordinate, quindi ci sono in tutto 3 incognite che devono essere trovate, e in base all'inserimento di nuove o eliminazione di coordinate vanno ad inserirsi al'interno di questo sistema, cosi che otteniamo la scala proporzionata.
    Io, detto francamente non so come risolverlo....se c'è qualcuno che ci riesce o che mi da altri soluzioni, ne sarei veramente grata! Sarebbe il mio ultimo esame prima della laurea ed è per questo che vi scrivo perchè sono realmente disperata!!!! Vi ringrazio infinitamente!

    ********************
    import javax.swing.JApplet;
    import java.awt.geom.Line2D;
    import java.awt.geom.Point2D;
    import java.awt.geom.Ellipse2D;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Color;
    import java.awt.Shape;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseMotionAdapter;
    import javax.swing.JOptionPane;
    import java.lang.Integer;
    import java.util.Vector;
    import java.util.NoSuchElementException;
    import java.util.Scanner;
    import java.io.*;


    public class progetto extends JApplet
    {
    private Point2D.Double inizio;
    private Point2D.Double fine;
    private Line2D.Double segmento;
    private Ellipse2D.Double ellisseInizio;
    private Ellipse2D.Double ellisseFine;
    Vector<Integer> x = new Vector<Integer>(500);
    Vector<Integer> y = new Vector<Integer>(500);
    int ampiezza=10;
    int maxX, minX;
    int maxY, minY;
    int max, min;
    private double inizioX;
    private double inizioY;
    private double xMovimento;
    private double yMovimento;
    private double xRilascio;
    private double yRilascio;
    private double x3;
    private double y3;
    private double x4;
    private double y4;

    public progetto()
    {
    int i;
    String xlinea;
    String ylinea;
    String nomeFile=JOptionPane.showInputDialog("Digita il nome del file da leggere");
    Scanner fileLettura;

    try
    {
    fileLettura = new Scanner(new File(nomeFile));
    while(fileLettura.hasNextLine())
    {
    String linea = fileLettura.nextLine();
    i = linea.indexOf(' '); // posizione del primo spazio
    xlinea = linea.substring(0,i).trim(); // da inizio a spazio
    ylinea = linea.substring(i).trim(); // da spazio in poi
    int xcoord = Integer.parseInt(xlinea);
    int ycoord = Integer.parseInt(ylinea);
    if(maxX<xcoord)
    maxX=xcoord;
    if(maxY<ycoord)
    maxY=ycoord;
    if(minX>xcoord)
    minX=xcoord;
    if(minY>ycoord)
    minY=ycoord;
    x.addElement(xcoord);
    y.addElement(ycoord);
    if(maxX>=maxY)
    {
    max=maxX;
    }
    else
    {
    max=maxY;
    }
    if(minX<=minY)
    {
    min=minX;
    }
    else
    {
    min=minY;
    }
    }

    }
    catch (FileNotFoundException e) // questo viene eseguito solo se si verifica una
    { // eccezione di classe FileNotFoundException
    System.out.println("Il file "+nomeFile + " non esiste o non puo' essere aperto");
    }
    catch (NoSuchElementException e) // questo viene eseguito solo se si verifica una
    { // eccezione di classe NoSuchElementException
    System.out.println("errore di lettura file "+e);
    }


    class AscoltaClick extends MouseAdapter
    {
    public void mousePressed(MouseEvent e)
    {
    inizioX = e.getX();
    inizioY = e.getY();
    Point2D.Double p2 = new Point2D.Double(inizioX, inizioY);
    if ((x3==0)&&(y3==0))
    {
    ellisseInizio = new Ellipse2D.Double(x3-5, y3-5, 0, 0);
    ellisseFine = new Ellipse2D.Double(x4-5, y4-5, 0, 0);
    }
    else
    {
    ellisseInizio = new Ellipse2D.Double(x3-5, y3-5, 10, 10);
    ellisseFine = new Ellipse2D.Double(x4-5, y4-5, 10, 10);
    }
    if(ellisseFine.contains(inizioX,inizioY)==true)
    {
    segmento.setLine(inizio,p2);
    }
    else if(ellisseInizio.contains(inizioX,inizioY)==true)
    {
    segmento.setLine(p2,fine);
    }
    else
    {
    x3=inizioX;
    y3=inizioY;
    inizio = p2;
    }
    repaint();
    }


    public void mouseReleased(MouseEvent e)
    {
    xRilascio = e.getX();
    yRilascio = e.getY();
    if(ellisseInizio.contains(inizioX,inizioY)==true)
    {
    inizio = new Point2D.Double(xRilascio, yRilascio);
    x3=xRilascio;
    y3=yRilascio;
    segmento = new Line2D.Double(inizio,fine);
    }
    else
    {
    fine = new Point2D.Double(xRilascio, yRilascio);
    x4=xRilascio;
    y4=yRilascio;
    segmento = new Line2D.Double(inizio,fine);
    }
    repaint();
    }
    }


    class AscoltaMovimento extends MouseMotionAdapter
    {
    public void mouseDragged(MouseEvent e)
    {
    xMovimento = e.getX();
    yMovimento = e.getY();
    Point2D.Double p = new Point2D.Double(xMovimento, yMovimento);
    if(ellisseInizio.contains(inizioX,inizioY)==true)
    {
    segmento = new Line2D.Double(p,fine);
    }
    else
    {
    segmento = new Line2D.Double(inizio,p);
    }
    repaint();
    }
    }
    MouseAdapter ascoltaEventi = new AscoltaClick(); //Crea un nuovo oggetto
    addMouseListener(ascoltaEventi); //Il metodo addMouseListener serve a registrare gli eventi del mouse
    MouseMotionAdapter ascoltaMosse = new AscoltaMovimento();
    addMouseMotionListener(ascoltaMosse);
    }

    public void paint(Graphics g)
    {
    Graphics2D g2 = (Graphics2D) g;
    g2.clearRect(0,0,getWidth(),getHeight());
    g.setColor(Color.red);
    g2.drawRect(0,0,getWidth()-1,getHeight()-1);
    g.setColor(Color.black);
    g2.drawString("SCALA ",5,445);

    for(int i=0;i<x.size();i++)
    g.fillOval(x.get(i)*getWidth()/(max+50)-ampiezza/2,y.get(i)*getHeight()/(max+50)-ampiezza/2, ampiezza, ampiezza);
    if(segmento!=null)
    g2.draw(segmento);
    for(int i=0;i<x.size();i++)
    {
    if(segmento.ptSegDist(x.get(i)*getWidth()/(max+50), y.get(i)*getHeight()/(max+50))<50)
    {
    g.setColor(Color.red);
    g.fillOval(x.get(i)*getWidth()/(max+50)-ampiezza/2,y.get(i)*getHeight()/(max+50)-ampiezza/2, ampiezza, ampiezza);
    }
    else if(segmento.ptSegDist(x.get(i)*getWidth()/(max+50), y.get(i)*getHeight()/(max+50))<100)
    {
    g.setColor(Color.yellow);
    g.fillOval(x.get(i)*getWidth()/(max+50)-ampiezza/2,y.get(i)*getHeight()/(max+50)-ampiezza/2, ampiezza, ampiezza);
    }
    else if(segmento.ptSegDist(x.get(i)*getWidth()/(max+50), y.get(i)*getHeight()/(max+50))>=100)
    {
    g.setColor(Color.green);
    g.fillOval(x.get(i)*getWidth()/(max+50)-ampiezza/2,y.get(i)*getHeight()/(max+50)-ampiezza/2, ampiezza, ampiezza);
    }
    }
    }
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Moderazione

    Leggere il regolamento interno prima di postare: titolo assolutamente inadeguato e posting del codice senza il rispetto delle indicazioni date sull'uso dei tag.

    Puoi riaprire una nuova discussione, dopo aver letto il regolamento interno, applicando quanto scritto.


    Chiudo.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.