Autor Tema: Graficar vectores en java dibujar líneas terminadas en flecha Graphics2D draw  (Leído 7763 veces)

JuanMontaña

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 87
    • Ver Perfil
De antemano me disculpo si no debo poner estos temas en este espacio.

Tengo un problema voy en segundo semestre de ingeniería civil y en física 1 me dejaron un trabajo "hacer un programa que sume dos vectores y los grafique en el plano cartesiano"

He estado investigando pero no he encontrado nada que me ayude a solucionarlo, y la verdad es que no tengo los suficientes conceptos y experiencia para solucionarlo.

Si alguien puede ayudarme en verdad lo apreciaría.

Gracias.
« Última modificación: 06 de Marzo 2016, 18:02 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Tienes dos cuestiones que abordar. Por un lado la suma de vectores. Dados dos vectores definidos como [x,y] y [z,k] la suma de ambos vectores es otro vector [x+z, y+k]

Por otro lado para dibujar un vector [a,b] podemos hacerlo como un segmento orientado desde un punto de referencia como (0, 0) hasta un punto de destino (a, b) siendo el sentido de la flecha el que va desde (0,0) hasta (a, b).

Para dibujar un vector en java puedes guiarte por este ejemplo:

Código: [Seleccionar]
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
 
public class ArrowHead
{
    public ArrowHead()
    {
        JFrame f = new JFrame();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.getContentPane().add(new ArrowPanel());
        f.setSize(400,400);
        f.setLocation(200,200);
        f.setVisible(true);
    }
 
    public static void main(String[] args)
    {
        new ArrowHead();
    }
}
 
class ArrowPanel extends JPanel
{
    double phi;
    int barb;
 
    public ArrowPanel()
    {
        phi = Math.toRadians(40);
        barb = 20;
    }
 
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                            RenderingHints.VALUE_ANTIALIAS_ON);
        int w = getWidth();
        int h = getHeight();
        Point sw = new Point(w/8, h*7/8);
        Point ne = new Point(w*7/8, h/8);
        g2.draw(new Line2D.Double(sw, ne));
        //drawArrowHead(g2, sw, ne, Color.red);
        drawArrowHead(g2, ne, sw, Color.blue);
    }
 
    private void drawArrowHead(Graphics2D g2, Point tip, Point tail, Color color)
    {
        g2.setPaint(color);
        double dy = tip.y - tail.y;
        double dx = tip.x - tail.x;
        double theta = Math.atan2(dy, dx);
        //System.out.println("theta = " + Math.toDegrees(theta));
        double x, y, rho = theta + phi;
        for(int j = 0; j < 2; j++)
        {
            x = tip.x - barb * Math.cos(rho);
            y = tip.y - barb * Math.sin(rho);
            g2.draw(new Line2D.Double(tip.x, tip.y, x, y));
            rho = theta - phi;
        }
    }
}


Saludos!
Responsable de departamento de producción aprenderaprogramar.com

JuanMontaña

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 87
    • Ver Perfil
Muchisimas gracias Cesar por tu respuesta.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".