public class Matriz {
public int numeroFilas;
public int numeroColumnas;
public double [][]matriz;
/**
* constructor sin parametros
*/
public Matriz(){//arreglo de filas y columnas
}
/**
* Constructor de parametros
* @param nF numero de Filas
* @param nC numero de Columnas
*/
public Matriz(int nF, int nC){
numeroFilas=nF;
numeroColumnas=nC;
matriz=new double[numeroFilas][numeroColumnas];//construyo un sitio para almacenar ceros
for(int i=0;i
matriz [i][j]=0;
}
/**
* Metodo de suma de matrices
* @param B primer sumando
* @return matriz resultado de suma
*/
public Matriz suma(Matriz b){
Matriz resultado;
//probar q el numero de fila y columnas de la primera matriz sea = al numero de
//filas y columnas de la segunda
//this referencia a un objeto que aun no esta creado pero que alguien algun momento lo va a crear
if((this.numeroFilas == b.numeroFilas)&& (this.numeroColumnas == b.numeroColumnas)){
resultado = new Matriz(this.numeroFilas, this.numeroColumnas);
for(int i=0; i < this.numeroFilas; i++)
for(int j=0; j < this.numeroColumnas; j++)
resultado.matriz[i][j] = this.matriz[i][j]+ b.matriz[i][j];
return resultado;
}
else
System.out.println("ERROR EN DIMENSIONES DE LAS MATRICES");
resultado=null;
return resultado;
}
/**
* Metodo de resta de matrices
* @return matriz resultado de resta
*/
public Matriz resta(Matriz b){
Matriz resultado;
if ((this.numeroFilas == b.numeroFilas)&(this.numeroFilas == b.numeroColumnas)){
resultado = new Matriz (this.numeroFilas,this.numeroColumnas);//construyo la caja donde almaceno el resultado
for(int i = 0;i
return resultado;
}
else{
System.out.println("ERROR EN DIMENSIONES DE LAS MATRICES");
resultado=null;
return resultado;
}
}
/**
* Metodo para transpuesta de una matriz
* @return
*/
//el numero de filas se cambia al numero de columnas
public Matriz Transpuesta(){
Matriz resultado;
resultado=new Matriz(this.numeroColumnas,this.numeroFilas);
for(int i=0; i < this.numeroFilas; i++)
for(int j=0; j < this.numeroColumnas; j++)
resultado.matriz[j][i]=this.matriz[i][j];
return resultado;
}
/**
* Metodo para multiplicaci�n entre matrices
* @return
*/
public Matriz Multiplicacion(Matriz b){
Matriz resultado;
if(this.numeroColumnas==b.numeroFilas){
resultado=new Matriz(this.numeroFilas, b.numeroColumnas);
for(int i=0; i < this.numeroFilas; i++){
for(int j=0; j < b.numeroColumnas; j++){
for(int k=0; k < this.numeroColumnas; k++)
resultado.matriz[i][j]+=this.matriz[i][k]*b.matriz[k][j];
}
}
return resultado;
}
else
System.out.println("ERROR EN DIMENSIONES DE LAS MATRICES");
resultado=null;
return resultado;
}
/**
* Devuelve el objeto matriz en texto
* @return
*/
public String toString(){
String aux="\n\n";
for(int i=0; i
}
aux+="\n";
}
aux+=" ";
return aux;
}
}
-----------------------------------------------------
CLASE VECTOR3D
public class Vector3D extends Matriz{
double coorX;
double coorY;
double coorZ;
public Vector3D(){//constructor de la clase
super(1,3);//llamo a la clase superior de la q estoy heredando
//es decir q llama a la clase matriz utilizando como datos
//2 parametros matriz[][]
}
public Vector3D(double x, double y, double z){
super(1,3);
this.matriz[0][0] = x;
this.matriz[0][1] = y;
this.matriz[0][2] = z;
coorX = x;
coorY = y;
coorZ = z;
}
/**
*Primer metodo para obtener la magnitud de un vector
*/
public double magnitud(){
double resultado = 0;
for(int i=0; i<3; i++){//menor a 3 por numero de coordenadas
resultado += this.matriz[0][i]*this.matriz[0][i];
}
resultado = Math.sqrt(resultado);
return resultado;
}
/**
*Segundo m�todo para obtener la magnitud de un vector
*/
public double magnitud1(){
double resultado;
resultado = Math.pow(this.coorX,2)+Math.pow(this.coorY,2)+Math.pow(this.coorZ,2);
resultado = Math.sqrt(resultado);
return resultado;
}
/**
*Obtener el unitario de un vector
*/
public Vector3D unitario(){
Vector3D unitario = new Vector3D();
for(int i=0; i<3; i++)
unitario.matriz[0][i] = this.matriz[0][i]/this.magnitud();
return unitario;
//unitario =(Vector3D)this.multiplicaEscalar(1/(this.magnitud()));
//(VECTOR3D)CASTING entre vector y matriz es valido porque son matrices
}
/**
*Producto escalar
*/
public double productoEscalar(Vector3D v){
double resultado = 0;
for(int i=0; i<3; i++)
resultado += this.matriz[0][i]*v.matriz[0][i];
return resultado;
}
/**
*Producto vectorial o cruz
*/
public Vector3D productoCruz(Vector3D v){
Vector3D resultado;
resultado = new Vector3D();
resultado.matriz[0][0] = this.matriz[0][1]*v.matriz[0][2]-this.matriz[0][2]*v.matriz[0][1];
resultado.matriz[0][1]=this.matriz[0][2]*v.matriz[0][0]-this.matriz[0][0]*v.matriz[0][2];
resultado.matriz[0][2]=this.matriz[0][0]*v.matriz[0][1]-this.matriz[0][1]*v.matriz[0][0];
return resultado;
}
public Vector3D productoVectorEscalar(double a){
Vector3D resultado;
resultado = new Vector3D();
for(int i = 0; i < 3; i++)
resultado.matriz[0][i] = this.matriz[0][i]*a;
return resultado;
}
public static void main(String args[]){
Vector3D v1 = new Vector3D(-1,1,-1);
Vector3D v2 = new Vector3D(0,2,0);
System.out.println("\nVector 1 = "+v1);
System.out.println("\nVector 2 = "+v2);
System.out.println("\nCoordenada en X= "+v1.coorX);
System.out.println("\nSuma de Vectores: "+(v1.suma(v2)));
System.out.println("\nMagnitud del Vector1 = "+v1.magnitud());
System.out.println("\nMagnitud del Vector1 = "+v1.magnitud1());
System.out.println("\nMagnitud del Vector2 = "+v2.magnitud1());
System.out.println("\nVector Unitario = "+v1.unitario());
System.out.println("\nComprobaci�n Vector Unitario = "+v1.unitario().magnitud());
System.out.println("\nProducto Escalar entre V1 y V2 = "+v1.productoEscalar(v2));
System.out.println("\nProducto Cruz entre V1 y V2 = "+v1.productoCruz(v2));
}
}
-----------------------------------------------
CLASE MRUV
public class MRUV {
Matriz posicion;//llamo a la clase matriz porq contiene las operciones q necesito
Matriz velocidad;
Matriz velocidad1;
Matriz aceleracion;
Matriz resultado;
/**
* Constructor sin parametros
*/
public MRUV(){
}
public MRUV(Vector3D pos, Vector3D vel, Vector3D ace, Vector3D res){
posicion = pos;
velocidad = vel;
aceleracion = ace;
resultado = res;
}
public void calcularPosicionMRUV(Vector3D r0, Vector3D vel, Vector3D v0,double t,Vector3D ace){
posicion = r0.suma(v0.productoVectorEscalar(t).suma(ace.productoVectorEscalar(Math.pow(t,2)/2)));
}
public void calcularVelocidadMRUV(Vector3D v0,double t,Vector3D r0,Vector3D ace){
velocidad = v0.suma(ace.productoVectorEscalar(t));
}
public static void main (String args []){
MRUV e = new MRUV();
Vector3D r0 = new Vector3D(1,0,-2);
Vector3D v0 = new Vector3D(0,1,0);//EN EL EJE Y
Vector3D v = new Vector3D(-2,0,1);
Vector3D a = new Vector3D(3,0,0);
double t = 2;
/**
*utilizando los metodos
*/
e.calcularPosicionMRUV(r0,v,v0,t,a);
e.calcularVelocidadMRUV(v0,t,r0,a);
System.out.println("Posicion a 2 segundos: "+e.posicion);
System.out.println("\nVelocidad a t = 2s\n"+e.velocidad);
System.out.println("\nAceleración = "+a);
}
}
for(int i=0;i for(int j=0; j
ResponderEliminarbruja los fors estan incompletos deben ser asi:
for(int i=0; i < numeroFilas; i++)
for(int j=0; j < numeroColumnas; j++)
otra forma de sacar la magnitud del vector es asi bruja:
public double magnitud2(){
double resultado;
resultado = Math.pow(this.coordenadaX, 2)+Math.pow(this.coordenadaY, 2)+Math.pow(this.coordenadaZ, 2);
resultado = Math.sqrt(resultado);
return resultado;
}
gracias Jhoa si en verdad la velocidad no es constante y en este movimiento la aceleracion es constante y voy a ocupar la formula es v = v0 + a.t
ResponderEliminaryo creé un método que calcule la aceleracion solo con la velocidad dividida para el tiempo
y cree divicion escalar que es una divicion de un vector para un escalar y luego hice esto:
public void calcularAceleracion(Vector3D vel, double t)
{
aceleracion = vel.divicionVectorEscalar(t);
pero en verdad no estoy segura de que se pueda dividir pero no me dio error con todo lo voy hacer como tu me dices.
gracias made a ti tambien la jhoa ya me hizo caer en cuenta de mi error y tambien ten cuidado con los espacios que tus lineas de codigo estan incompletas debes poner espacio antes y despues de <>.
ResponderEliminarhola made esta muy bien tu trabajo aunque podias haber aplicado el segundo método no es muy conveniente ya q estos tienes q manipularlos en el vector(?,?,?) por lo q con el un metodo basta, lo de la caro no te recomiendo xq no existe la division entre vectores solo entre numeros(escalar).
ResponderEliminarHola Made, tienes los for incompletos, pero creo que es un error que se produce al pegar el codigo del programa aca.
ResponderEliminarposicion = r0.suma(v0.productoVectorEscalar(t).suma(ace.productoVectorEscalar(Math.pow(t,2)/2)));
ResponderEliminardouble t = v0.prductoVectorEscalar(t);
double y = Math.pow(t,2)/2;
double x = ace.productoVectorEscalar(y);
posicion = r0.suma(t.suma(x));
No estoy diciendo que es una divición de vectores porque eso no existe lo que estoy diciendo es una divición de un escalar para un vector lo cual si existe:
ResponderEliminary cree una divicion de un vector para un escalar vel (vector), t(tiempo,numero) y luego hice esto:
public void calcularAceleracion(Vector3D vel, double t)
{
aceleracion = vel.divicionVectorEscalar(t);