Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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.
-
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:
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!
-
Muchisimas gracias Cesar por tu respuesta.