2012-02-05 2 views
2

Допустим, вы хотите сделать некоторые простые вычисления вектора:Java Vector Math читаемость

//this could be C++ 
MyVectorType position = ...; 
MyVectorType velocity = ...; 
float dt; 
//Here's the expression I want to calculate: 
position += dt*velocity; 

Теперь предположим, что вы хотите сделать это в Java. Нет перегрузки оператора - хорошо, я могу жить без.

//this still could be C++ 
MyVectorType position = ...; 
MyVectorType velocity = ...; 
float dt; 
//Here's the expression I want to calculate: 
position.add(velocity.times(dt)); 

Я бы сказал, что это менее читаемо, но все еще в порядке. Как написать код выше в Java? Я думал, что я хотел бы использовать javax.vecmath:

//my attempt in Java 
Vector3f velocity = new Vector3f(...); 
Vector3f position = new Vector3f(...); 
float dt; 
//Here's the expression I want to calculate - three lines. 
Vector3f deltaPosition = new Vector3f(velocity); 
deltaPosition.scale(dt); 
position.add(deltaPosition); 

ли это действительно необходимо, чтобы эти три линии, чтобы выполнить такую ​​простую операцию? Для людей, привыкших читать математические выражения, я думаю, что это боль, тем более что операции становятся более сложными. Кроме того, писать такие выражения на самом деле не очень приятно.

Я что-то упустил? Или есть другой векторный математический пакет, который приводит к более читаемому коду?

ответ

1

Пакет javax.vecmath, к сожалению, неудобный. Вы можете посмотреть JAMA от NIST. Это матрица пакет, а не вектор пакет (не перекрестный продукт, к примеру), но, по крайней мере, с этим пакетом, вы можете цепи операции вместе на одной строке:

double[][] array = {{1.,2.,3},{4.,5.,6.},{7.,8.,10.}}; 
Matrix A = new Matrix(array); 
Matrix b = Matrix.random(3,1); 
Matrix x = A.solve(b); 
Matrix Residual = A.times(x).minus(b); 

Вы можете сделать много векторной арифметики путем обработки векторов как 1xN-матриц.

NIST также разместил page of links to other Java numerics packages, где вы можете найти что-то более близкое к вашим потребностям, если JAMA не совсем прав.

+1

Цепочка - это путь в джаву, говорит. –

 Смежные вопросы

  • Нет связанных вопросов^_^