Documentos de Académico
Documentos de Profesional
Documentos de Cultura
...
}
...
}
Interfaz Dibujable
package modelos;
import java.awt.*;
Clase Punto
package modelos;
import java.awt.*;
public Punto() {
this(0, 0, 0, Color.BLACK);
}
@Override
public void dibujar(Graphics g) {
g.setColor(color);
g.fillOval(x - radio, y - radio, 2 * radio, 2 * radio);
g.setColor(Color.BLACK);
g.drawOval(x - radio, y - radio, 2 * radio, 2 * radio);
}
}
Clase Puntos
package modelos;
import java.awt.Graphics;
import java.util.ArrayList;
@Override
public void dibujar(Graphics g) {
for (Punto punto : this) {
punto.dibujar(g);
}
}
}
import java.awt.*;
import javax.swing.*;
import modelos.*;
public PanelPuntos() {
this(new Puntos());
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
puntos.dibujar(g);
}
import java.awt.*;
import javax.swing.*;
import modelos.*;
import vistas.*;
Clase OyentePuntos
package controladores;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import modelos.*;
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX();
int y = e.getY();
Punto punto = new Punto(x, y, 10, Color.BLUE);
puntos.add(punto);
panel.repaint();
}
}
package manejopuntos;
import javax.swing.*;
import modelos.*;
f.setSize(800,600);
f.setLocation(100,100);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(panel);
f.setVisible(true);
}
}
Clase PanelManejoPuntos
package manejopuntos;
import modelos.Puntos;
public PanelManejoPuntos() {
initComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
setLayout(new java.awt.BorderLayout());
botonLimpiar.setText("Limpiar Panel");
panelNorte.add(botonLimpiar);
add(panelNorte, java.awt.BorderLayout.NORTH);
add(panelPuntos, java.awt.BorderLayout.CENTER);
}// </editor-fold>
Clase OyenteManejoPuntos
package manejopuntos;
import controladores.*;
import java.awt.event.*;
import javax.swing.*;
import modelos.Puntos;
@Override
public void actionPerformed(ActionEvent e) {
puntos = new Puntos();
panel.repaint();
}
}
Clase: OyenteMoverPuntos
package controladores;
import java.awt.event.*;
import javax.swing.JPanel;
import modelos.*;
@Override
public void mousePressed(MouseEvent e) {
for (Punto pto : puntos) {
if (pto != null) {
double d = pto.distance(e.getX(), e.getY());
if (d <= pto.getRadio()) {
seleccionado = true;
puntoSeleccionado = pto;
}
}
}
}
@Override
public void mouseReleased(MouseEvent e) {
seleccionado = false;
}
@Override
public void mouseDragged(MouseEvent e) {
if (seleccionado) {
puntoSeleccionado.move(e.getX(), e.getY());
panel.repaint();
}
}
}
package movimientopuntos;
import javax.swing.*;
import modelos.*;
Clase PanelMovimientoPuntos
package movimientopuntos;
import modelos.Puntos;
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-
BEGIN:initComponents
private void initComponents() {
setLayout(new java.awt.BorderLayout());
botonLimpiar.setText("Limpiar Panel");
panelNorte.add(botonLimpiar);
add(panelNorte, java.awt.BorderLayout.NORTH);
panelCentro.setLayout(new java.awt.BorderLayout());
add(panelCentro, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
Clase OyenteMovimientoPuntos
package movimientopuntos;
import controladores.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import modelos.*;
@Override
public void actionPerformed(ActionEvent e) {
puntos.clear();
panel.repaint();
}
}
Curva cuadrática:
– Una curva cuadrática definida matemáticamente como un polinomio cuadrático
especificado por tres puntos de control.
– El primer y último punto son los extremos de la curva. El punto medio define la tendencia
de la curva.
Curva cúbica:
– Representa una curva Bezier cúbica, con cuatro puntos e control
Clase Bezier
package modelos;
import java.awt.Color;
import java.awt.Graphics;
public Bezier() {
this(Color.BLACK);
}
@Override
public void dibujar(Graphics g) {
if (isEmpty()) {
return;
}
super.dibujar(g);
if (size() == tamaño) {
double inc = 0.005;
g.setColor(color);
Punto p0 = get(0);
Punto p1 = get(1);
Punto p2 = get(2);
switch (tamaño) {
case 3: // Dibujar una curva cuadrática
for (double t = 0; t <= 1; t += inc) {
double x = Math.pow(1 - t, 2) * p0.x
+ 2 * t * (1 - t) * p1.x
+ t * t * p2.x;
double y = Math.pow(1 - t, 2) * p0.y
+ 2 * t * (1 - t) * p1.y
+ t * t * p2.y;
g.fillOval((int) x - 2, (int) y - 2, 4, 4);
}
break;
case 4: // Dibujar una curva cúbica
Punto p3 = get(3);
for (double t = 0; t <= 1; t += inc) {
double x = Math.pow(1 - t, 3) * p0.x
+ 3 * Math.pow(1 - t, 2) * t * p1.x
+ 3 * (1 - t) * t * t * p2.x
+ t * t * t * p3.x;
double y = Math.pow(1 - t, 3) * p0.y
+ 3 * Math.pow(1 - t, 2) * t * p1.y
+ 3 * (1 - t) * t * t * p2.y
+ t * t * t * p3.y;
g.fillOval((int) x - 2, (int) y - 2, 4, 4);
}
}
}
}
package curvasbezier;
import javax.swing.*;
import modelos.*;
Clase PanelBezier
package curvasbezier;
import modelos.Bezier;
@SuppressWarnings("unchecked")
private void initComponents() {
panelNorte = new javax.swing.JPanel();
botonCuadratica = new javax.swing.JButton();
botonCubica = new javax.swing.JButton();
panelCentro = new vistas.PanelPuntos();
setLayout(new java.awt.BorderLayout());
botonCuadratica.setText("Curva Cuadrática");
botonCuadratica.setName("cuadratica"); // NOI18N
panelNorte.add(botonCuadratica);
botonCubica.setText("Curva Cúbica");
botonCubica.setName("cubica"); // NOI18N
panelNorte.add(botonCubica);
add(panelNorte, java.awt.BorderLayout.NORTH);
panelCentro.setLayout(new java.awt.BorderLayout());
add(panelCentro, java.awt.BorderLayout.CENTER);
}// </editor-fold>//GEN-END:initComponents
Clase: OyenteBezier
package curvasbezier;
import controladores.*;
import java.awt.event.*;
import javax.swing.*;
import modelos.*;
@Override
public void actionPerformed(ActionEvent e) {
JComponent origen = (JComponent) e.getSource();
Bezier bezier = (Bezier)puntos;
bezier.clear();
switch (origen.getName()) {
case "cuadratica":
bezier.setTamaño(3);
break;
case "cubica":
bezier.setTamaño(4);
}
panel.repaint();
}
@Override
public void mouseClicked(MouseEvent e) {
Bezier bezier = (Bezier) puntos;
if (bezier.size() < bezier.getTamaño()) {
super.mouseClicked(e);
}
}
}