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.