Esercizio di informatica per venerdì 09/12/2016

graficoxyCreare JDati (sottoclasse di JOxy) che permetta l’inserimento e la memorizzazione di un insieme di punti sul piano cartesiano: cliccando con il mouse in un punto, la coppia di coordinare reali deve essere memorizzata in un array e visualizzata sul grafico. Sul grafico i punti inseriti devono essere rappresentati da un quadratino con a fianco le coordinate reali e i punti devono essere uniti tra di loro. Vedi figura a destra (clicca per ingrandire).

Facoltativo: cliccando su un punto già inserito, il punto deve sparire dal grafico e le linee devono aggiornarsi di conseguenza.

Esercizio di informatica per lunedì 5/12/2016

Realizzare un programma Java con layout BorderLayout avente sulla finestra principale nel centro un oggetto simile a JFunzioni e in alto un pannello con la possibilità di inserire un polinomio di 5 grado (al massimo). I coefficienti del polinomio devono potersi inserire in 6 caselle di testo intervallate dalle label ” x5 + “, “x4 + “, “x3 + “, “x2 + “, “x + “; deve essere presente sulla destra un bottone “Inserisci” che inserisce nell’array della classe suddetta il polinomio in quel momento presente e lo visualizza con un colore scelto a caso.

Progetto Eclipse aggiornato a venerdì 02/12/2016: Grafica.zip

Esercizio di informatica per la 4E

Progetto Eclipse: grafica.zip

Studiare il progetto in dettaglio e inserire altre funzioni sullo stesso grafico:

y = -2 x^2 + x – 3

y = x^3 – x

y = cos x

y = log x

y = rad.quad(16 – x^2)

NB Negli ultimi 2 casi è necessario apportare le dovute modifiche al metodo paintComponent di JFunzioni per controllare le eccezioni che possono presentarsi nel calcolo di f(x).

Classe da completare a casa: JRetta

Creare JRetta sottoclasse di JOxy avente i due attributi “m” e “q” che disegna all’interno di un sistema di riferimento il grafico della retta in forma esplicita.

package it.liceocuneo.math;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.io.Serializable;

import javax.swing.JPanel;

public class JOxy extends JPanel implements Serializable {

	private String titleX = "X", titleY = "Y";
	private int scaleX = 40, scaleY = 40;
	private int traslX = 10, traslY = 10;

	public JOxy() {
		this.setPreferredSize(new Dimension(200, 200));
		this.setBackground(Color.WHITE);
	}

	public int xg(double xr) {
		return (int) Math.round(this.getWidth() * traslX / 100 + xr * scaleX);
	}

	public int yg(double yr) {
		return (int) Math.round(this.getHeight() * (100 - traslY) / 100 - yr * scaleY);
	}

	public double xr(int xg) {
		return (xg - this.getWidth() * traslX / 100) / (double) scaleX;
	}

	public double yr(int yg) {
		return (this.getHeight() * (100 - traslY) / 100 - yg) / (double) scaleY;
	}

	public double getMinX() {
		return xr(0);
	}

	public double getMaxX() {
		return xr(this.getWidth());
	}

	public double getMinY() {
		return yr(this.getHeight());
	}

	public double getMaxY() {
		return yr(0);
	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		int w = this.getWidth(), h = this.getHeight();

		// asse X
		g.drawLine(0, yg(0), w, yg(0));
		for (int i = (int) getMinX(); i <= (int) getMaxX(); i++) {
			g.drawLine(xg(i), yg(0) - 5, xg(i), yg(0) + 5);
			g.drawString(i + "", xg(i) - g.getFontMetrics().stringWidth(i + "") / 2, yg(0) + 5 + g.getFontMetrics().getAscent());
		}
		g.drawString(titleX, w - 5 - g.getFontMetrics().stringWidth(titleX), yg(0) - 10);

		// asse Y
		g.drawLine(xg(0), 0, xg(0), h);
		for (int i = (int) getMinY(); i <= (int) getMaxY(); i++) {
			g.drawLine(xg(0) - 5, yg(i), xg(0) + 5, yg(i));
			g.drawString(i + "", xg(0) - 7 - g.getFontMetrics().stringWidth(i + ""), yg(i) - 1 + g.getFontMetrics().getAscent() / 2);
		}
		g.drawString(titleY, xg(0) + 10, 15);
	}

	public String getTitleX() {
		return titleX;
	}

	public void setTitleX(String titleX) {
		this.titleX = titleX;
	}

	public String getTitleY() {
		return titleY;
	}

	public void setTitleY(String titleY) {
		this.titleY = titleY;
	}

	public int getScaleX() {
		return scaleX;
	}

	public void setScaleX(int scaleX) {
		if (scaleX >= 20)
			this.scaleX = scaleX;
	}

	public int getScaleY() {
		return scaleY;
	}

	public void setScaleY(int scaleY) {
		if (scaleY >= 20)
			this.scaleY = scaleY;
	}

	public int getTraslX() {
		return traslX;
	}

	public void setTraslX(int traslX) {
		this.traslX = traslX;
	}

	public int getTraslY() {
		return traslY;
	}

	public void setTraslY(int traslY) {
		this.traslY = traslY;
	}

}

UFO

Progetto Eclipse: UFO.zip

Creare un semplice programma con pannello JPrato (verde) che possa contenere vari oggetti JFiore (tipo margherita). Le margherite vengono inserite con il click del mouse. In JPrato deve esserci una JLabel in alto a sinistra che tenga il conteggio delle margherite presenti. Cliccando con il mouse su una margherita deve diventare invisibile.

JCanvas

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JPanel;

public class JCanvas extends JPanel implements MouseListener, MouseMotionListener {

	private int x1 = -1, y1 = -1, x2 = -1, y2 = -1;

	public JCanvas() {
		this.setPreferredSize(new Dimension(100, 100));
		this.addMouseListener(this);
		this.addMouseMotionListener(this);
	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		
		g.drawLine(x1, y1, x2, y2);
	}

	@Override
	public void mousePressed(MouseEvent e) {
		x1 = e.getX(); x2 = x1;
		y1 = e.getY(); y2 = y1;
		repaint();
	}

	@Override
	public void mouseDragged(MouseEvent e) {
		x2 = e.getX();
		y2 = e.getY();
		repaint();
	}

	@Override
	public void mouseReleased(MouseEvent e) {
		x2 = e.getX();
		y2 = e.getY();
		repaint();
	}

	@Override
	public void mouseClicked(MouseEvent e) { }

	@Override
	public void mouseEntered(MouseEvent e) { }

	@Override
	public void mouseExited(MouseEvent e) { }

	@Override
	public void mouseMoved(MouseEvent e) { }
	
}

Esercizio per casa 4E Informatica

trasformazioni-di-coordinate

Migliorare il programma visto in classe inserendo le etichette dei numeri sugli assi cartesiani: -2 -1 0 1 2 3 4 etc. distanziate di 40 pixel; fare in modo che alla pressione del mouse vengano visualizzate le coordinate con il corretto fattore di scala coerente con le etichette inserite. Listato:

package it.liceocuneo.math;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.Serializable;

import javax.swing.JPanel;

public class JOxy extends JPanel implements Serializable, MouseListener {

	private String titleX = "X", titleY = "Y";
	private boolean visibile = false;
	private int posX = 0, posY = 0;

	public JOxy() {
		this.setPreferredSize(new Dimension(200, 200));
		this.setBackground(Color.WHITE);
		this.addMouseListener(this);
	}

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);

		int w = this.getWidth(), h = this.getHeight();
		int w2 = w / 2, h2 = h / 2;

		g.setColor(Color.BLACK);
		g.drawLine(0, h2, w - 1, h2);
		g.drawLine(w2, 0, w2, h - 1);

		g.drawString(titleX, w - 10, h2 - 5);
		g.drawString(titleY, w2 + 5, 15);

		if (visibile) {
			int xReale = posX - w2;
			int yReale = h2 - posY;
			g.drawString("(" + xReale + "," + yReale + ")", posX + 10, posY + 5);
		}
	}

	public String getTitleX() {
		return titleX;
	}

	public void setTitleX(String titleX) {
		this.titleX = titleX;
	}

	public String getTitleY() {
		return titleY;
	}

	public void setTitleY(String titleY) {
		this.titleY = titleY;
	}

	@Override
	public void mouseClicked(MouseEvent arg0) { }

	@Override
	public void mouseEntered(MouseEvent arg0) { }

	@Override
	public void mouseExited(MouseEvent arg0) { }

	@Override
	public void mousePressed(MouseEvent arg0) {
		posX = arg0.getX();
		posY = arg0.getY();
		visibile = true;
		repaint();
	}

	@Override
	public void mouseReleased(MouseEvent arg0) {
		visibile = false;
		repaint();
	}

}

Grafica in Java

Esempio visto in classe: Grafica.zip

Creare un componente grafico che si autodimensiona quando si ridimensiona la finestra che lo contiene e che rappresenta un rombo bianco con bordo nero all’interno di un’ellisse gialla con bordo nero. Devono essere visibili in fase di progettazione nel WindowBuilder gli attributi coloreRombo e coloreEllisse di tipo Color preimpostati sui valori suddetti.

Esercizi in preparazione alla verifica di Fisica 4E

  1. Una bombola contiene 0,25 m³ di ossigeno (biatomico) alla pressione di 15 atmosfere alla temperatura di 20 °C. Calcola l’energia cinetica (trasl+rotaz) che possiede una molecola di ossigeno, la velocità media e l’energia interna del gas. Massa atomica O = 16 g/mol
  2. Un’abitazione ha una superficie esterna pari a 450 m² e i muri spessi 0,4 m. La temperatura al suo interno è di 20 °C mentre l’esterno è a -5 °C. La conducibilità delle pareti è di 0,72 W m-1 K-1 . Calcola quanto gas naturale deve essere bruciato in 1 ora dalla caldaia di casa che ha un rendimento del 70% per mantenere la temperatura costante sui 20 °C. Il potere calorifico del gas è di 54 MJ/kg.
  3. La superficie di un lago nel deserto è pari a 4,8 km². L’irraggiamento del sole è pari a 100 W/m². Il lago ha una profondità media di 1,2 m. Il calore latente di evaporazione dell’acqua è pari a 2,26 MJ/kg. Dopo quanti giorni l’acqua sarà completamente evaporata?
  4. Una mole di gas si trova alla temperatura di 0 °C e alla pressione atmosferica. Quanto volume occupa? Subisce un riscaldamento a pressione costante che porta la sua temperatura a 180 °C. Calcola il lavoro compiuto dal gas. Successivamente, mantenendo la temperatura costante si riporta il gas al volume inizale. Calcolare anche il lavoro in questo secondo caso.