You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.2 KiB
Java
95 lines
3.2 KiB
Java
package com.verictas.pos.simulator.mathUtils;
|
|
|
|
import javax.vecmath.GMatrix;
|
|
import javax.vecmath.Vector3f;
|
|
|
|
public class Vector3fMatrix extends GMatrix {
|
|
/**
|
|
* Creates a new matrix with some helper functions for use with Vector3f. The created matrix will be empty.
|
|
* @param n The number of rows.
|
|
* @param m The number of columns.
|
|
*/
|
|
public Vector3fMatrix(int n, int m) {
|
|
// Change the size to suit Vector3f
|
|
super(n, m * 3);
|
|
this.setZero();
|
|
}
|
|
|
|
/**
|
|
* Set the size of the matrix in the amount of vectors (e.g. a 1 x 3 vector matrix gets converted to a 1 x 9 storage matrix).
|
|
* @param n The amount of rows
|
|
* @param m The amount of columns expressed in vectors (1 vector = 3 values).
|
|
*/
|
|
public void setSizeInVectors(int n, int m) {
|
|
this.setSize(n, m * 3);
|
|
}
|
|
|
|
/**
|
|
* Provides a function for putting the matrix into String form for visualisation.
|
|
* @return String
|
|
*/
|
|
public String toString() {
|
|
StringBuffer buffer = new StringBuffer(this.getNumRow() * this.getNumCol() * 8);
|
|
|
|
for(int n = 0; n < this.getNumRow(); ++n) {
|
|
for(int m = 0; m < this.getNumCol(); ++m) {
|
|
if ((m + 1) == 1 || m % 3 == 0) {
|
|
// If m is 1 or a multiple of 4, begin the bracket.
|
|
buffer.append("(").append(this.getElement(n, m)).append(", ");
|
|
} else if ((m + 1) % 3 == 0) {
|
|
// If m is a multiple of 3, close the bracket
|
|
buffer.append(this.getElement(n, m)).append(")\t\t");
|
|
} else {
|
|
buffer.append(this.getElement(n, m)).append(", ");
|
|
}
|
|
}
|
|
|
|
buffer.append("\n");
|
|
}
|
|
|
|
return buffer.toString();
|
|
}
|
|
|
|
/**
|
|
* Provides a translator from the vector positions (e.g. the second vector starts at position 1) to the matrix positions (the second vector starts at position 3).
|
|
* @param n The vector positions row
|
|
* @param m The vector positions column
|
|
* @return void
|
|
*/
|
|
private int[] translatePosition(int n, int m) {
|
|
return new int[]{n, m * 3};
|
|
}
|
|
|
|
/**
|
|
* Provides a way to set a vector into a certain position in the matrix
|
|
* @param settable The vector you want to put in the matrix
|
|
* @param n The row to insert into
|
|
* @param m The column to insert into
|
|
*/
|
|
public void setPosition(Vector3f settable, int n, int m) {
|
|
int[] position = translatePosition(n, m);
|
|
n = position[0];
|
|
m = position[1];
|
|
|
|
this.setElement(n, m, settable.x);
|
|
this.setElement(n, m + 1, settable.y);
|
|
this.setElement(n, m + 2, settable.z);
|
|
}
|
|
|
|
/**
|
|
* Provides a way to get a vector from a certain position in the matrix
|
|
* @param n The row to get from
|
|
* @param m The column to get from
|
|
* @return Vector3f The vector in that position
|
|
*/
|
|
public Vector3f getPosition(int n, int m) {
|
|
int[] position = translatePosition(n, m);
|
|
n = position[0];
|
|
m = position[1];
|
|
|
|
float x = (float) this.getElement(n, m);
|
|
float y = (float) this.getElement(n, m + 1);
|
|
float z = (float) this.getElement(n, m + 2);
|
|
return new Vector3f(x, y, z);
|
|
}
|
|
} |