Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: JuanMontaña en 04 de Marzo 2016, 18:26

Título: Graficar vectores en java dibujar líneas terminadas en flecha Graphics2D draw
Publicado por: JuanMontaña en 04 de Marzo 2016, 18:26
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.
Título: Re:Graficar vectores en java dibujar líneas terminadas en flecha Graphics2D draw
Publicado por: César Krall en 06 de Marzo 2016, 18:05
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!
Título: Re:Graficar vectores en java dibujar líneas terminadas en flecha Graphics2D draw
Publicado por: JuanMontaña en 07 de Marzo 2016, 02:00
Muchisimas gracias Cesar por tu respuesta.