Java - Llamar una matriz desde otra clase

   
Vista:

Llamar una matriz desde otra clase

Publicado por Javier (3 intervenciones) el 14/05/2013 16:01:07
Hola amigos. Soy nuevo en el tema de Java, y llevo días tratando de resolver un problema.
He creado una clase que llena una matriz, de la forma (omito las importaciones ):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public float[][] setDenavit_Hartenberg(float theta, float d, float a, float alpha){
		DecimalFormat cuatroDigitos=new DecimalFormat("0.0000");
 
 
		A[0][0]=(float) Math.cos(theta);
		A[0][1]=(float) (-Math.cos(alpha)*Math.sin(theta));
		A[0][2]=(float) (Math.sin(alpha)*Math.sin(theta));
		A[0][3]=(float) (a*(Math.cos(theta)));
		A[1][0]=(float) (Math.sin(theta));
		A[1][1]=(float) (Math.cos(alpha)*Math.cos(theta));
		A[1][2]=(float) (-Math.sin(alpha)*Math.cos(theta));
		A[1][3]=(float) (a*(Math.sin(theta)));
		A[2][0]=(float) 0;
		A[2][1]=(float)(Math.sin(alpha));
		A[2][2]=(float)(Math.cos(alpha));
		A[2][3]=(float) d;
		A[3][0]=(float) 0;
		A[3][1]=(float) 0;
		A[3][2]=(float) 0;
		A[3][3]=(float) 0;
}


luego he creado otra clase, de la siguiente forma (solo muestro una parte de la programacion):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class CinematicaDirecta extends Denavit_Hartenberg {
 
	public CinematicaDirecta(){}
 
public void setCinematicaDirecta(float Q1,float Q2,float Q3,float Q4,float Q5){
 
	Denavit_Hartenberg DH=new Denavit_Hartenberg();
 
 
	float[][] L={{75,275,0,90},//Q1,275,0,90
				 {Q2,0,200,0},
				 {Q3,0,130,0},
				 {Q4+90,0,0,90},
				 {Q5,130,0,0}};
 
 
 
 
 
	//String salida = null;
 
			DH.setDenavit_Hartenberg((L[0][0]),(L[0][1]),(L[0][2]),(L[0][3]));
 
			float[][] A12=new float[4][4];
			float[] A23=new float [4];
			float[] A34=new float [4];
			float[] A45=new float [4];
 
 
 
			}
		}


Lo que quiero hacer es que, cuando llame a DH.setDenavit_Hartenberg((L[0][0]),(L[0][1]),(L[0][2]),(L[0][3])), los datos de la matriz A, correspondientes al método de la clase Denavit_Hartenberg, se traspasen por ejemplo, en la matriz A12 de la clase CinematicaDirecta.

Alguien sabe como puedo hacer eso?
Agradezco desde ya su respuesta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Llamar una matriz desde otra clase

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 14/05/2013 20:24:42
Hola Javier,
Ya que tu método retorna una matriz de tipo float (aunque te falta colocar el return A;) puede hacer esto cuando llamas al metodo de la siguiente manera.

A12=DH.setDenavit_Hartenberg((L[0][0]),(L[0][1]),(L[0][2]),(L[0][3]));

de esta manera A12 tendría la misma referencia osea que si la matriz A cambia un valor, tambien lo hará A12 porque estan apuntando al mismo espacio de memoria. Si no queres esto puedes hacer uso del metodo clone heredado de la clase Object pero implementado por ti. Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Llamar una matriz desde otra clase

Publicado por Javier (3 intervenciones) el 14/05/2013 21:16:12
Muchas gracias, ya solucione ese problema. Pero me viene otro problemilla.
Tengo esto en la función CinematicaDirecta:

A01=(float[][]) DH.setDenavit_Hartenberg((float)Math.toRadians(L[0][0]),L[0][1],L[0][2],(float)Math.toRadians(L[0][3]));

A12=(float[][])DH.setDenavit_Hartenberg((float)Math.toRadians(L[1][0]),L[1][1],L[1][2],(float)Math.toRadians(L[1][3]));

cuando imprimo en el principal me da el mismo valo de A01, siendo que los valores en la segunda fila de L, son distintos. De hecho, me da la matriz que corresponde a los valores de A12.

En el main:
1
2
3
4
5
6
7
8
9
10
11
12
for(int i=0; i<CD.A01.length;i++){
         for(int j=0; j<CD.A01[i].length; j++){
	System.out.print(cuatroDigitos.format(CD.A01[i][j])+"\t");
	}
	System.out.println();							}
	System.out.println();
for(int i=0; i<CD.A12.length;i++){
        for(int j=0; j<CD.A12[i].length; j++){
	System.out.print(cuatroDigitos.format(CD.A12[i][j])+"\t");
	}
	System.out.println();							}
	System.out.println();


se imprime lo siguiente;

0,8660 -0,5000 0,0000 173,2051
0,5000 0,8660 -0,0000 100,0000
0,0000 0,0000 1,0000 0,0000
0,0000 0,0000 0,0000 0,0000

0,8660 -0,5000 0,0000 173,2051
0,5000 0,8660 -0,0000 100,0000
0,0000 0,0000 1,0000 0,0000
0,0000 0,0000 0,0000 0,0000


quiero los valores de DH.setDenavit_Hartenberg se vayan almacenando en distintas matrices, de modo tal que pueda multiplicarlas luego. Agradezco la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Llamar una matriz desde otra clase

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 14/05/2013 22:12:28
Es lo que te dije!!!. ES por que quedan apuntando al mismo espacio de memoria. para esto debes hacer uso del método clone().
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Llamar una matriz desde otra clase

Publicado por Javier (3 intervenciones) el 14/05/2013 22:44:31
No se como hacer eso... te recuerdo que soy nuevo, jeje. He buscado información por varios lados, respecto al método clone. Me podrías enviar un ejemplo de como hacer uso del método clone() en este caso en particular. Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jhonnathan Emilio Cardona Saineda

Llamar una matriz desde otra clase

Publicado por Jhonnathan Emilio Cardona Saineda (328 intervenciones) el 14/05/2013 23:15:58
Lo que pasa es que como no muestras toda la clase no se cual es tu lógica ni que es exactamente lo que quieres hacer, ni para que, pero te dejo un ejemplo. Observa muy bien las diferencias con y sin utilizar clone:

Sin utilizar clone()
1
2
3
4
5
int a[]= new int[2];
		a[0]=4;
		int b[]=a;
		b[0]=2;
		System.out.println(a[0]);


Utilizando clone()
1
2
3
4
5
int a[]= new int[2];
		a[0]=4;
		int b[]=a.clone();
		b[0]=2;
		System.out.println(a[0]);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar