2014-02-04 2 views
0

Как бы я реализовать что-то вроде этого в Java:Внедрение формулы и Sigma Sum в Java?

enter image description here

Вот моя попытка до сих пор:

float yPos = (float) ((Q* A) * D.y * Math.cos(w.y * (D.dot(x,y)) + phase_const * t)); 

Im запутался, как я мог бы реализовать что-то вроде Sigma или Sum() или wiDi. (x, y) не уверены, правильно ли я его реализовал.

Спасибо

+2

Вы можете реализовать его на Java, вызвав Matlab с Java: D – Maroun

+1

Мне очень жаль, что я не смог связаться с хахахом. Matlab. Я помню те дни. : P Engineering 2-й год ... – TastyLemons

+0

Sigma проще всего сделать в java 8: 'IntStream.range (0, n) .mapToDouble (i -> cos (i)). Sum()'. –

ответ

1

Ну, вы, конечно, не получите это в одну строку кода. ;-)

Я не знаю, что делает эта математика, но позвольте мне предложить подход.

Похоже, что в различных выражениях сигмы существуют различные объекты (Q, A, D и т. Д.), Которые имеют одинаковое количество элементов, которые должны быть итерированы индексом «i».

Эти объекты, по-видимому, создаются в некоторой точке, оставаясь постоянными, а функция «P» применяется к множеству значений x, y и t.

Это предполагает, что вам нужен класс «Калькулятор», который принимает эти объекты (Q, A, D и т. Д.) В качестве параметров конструктора. (Или, возможно, вычисляет их в конструкторе.)

Затем ваша функция Calculator.P() определяется значениями x, y и t и возвращает тройку значений. (Я не уверен, что это означает говорить о точках, но используйте подходящий 3-значный объект.)

Тело P затем просто становится 3-мя циклами «for (int i = 0; i <) numValues; i ++) ", вычисляя сумму каждого из этих выражений.

Короче говоря, у вас есть класс, который принимает инварианты в качестве параметров конструктора, поэтому их можно сохранить для использования при каждом вызове P и поместить все параметризованные вычисления в функцию P.

+0

Большое спасибо за ответ :) Метод формирует этот источник: http://http.developer.nvidia.com/GPUGems/gpugems_ch01.html Я пытаюсь имитировать воду, используя метод gerstner. Этот метод создает волны – TastyLemons

+0

Вот что я сейчас работаю над: http://gamedev.stackexchange.com/questions/69824/3d-water-simulation-formula-questions/69826?noredirect=1#69826 – TastyLemons

+1

Это похоже на забавная проблема. Итак, Q, A и т. Д. Являются фактически параметрами отдельных волн, и i итерации через волны.Таким образом, GerstnerWaveCalculator содержит несколько Waves и может вычислять измененную позицию вершин для любого заданного (x, y, t). Предположительно, тогда параметры волны могут быть индивидуально изменены с течением времени. Удачи вам. –

2

Формула содержит матричные операции, которые являются дорогостоящими закодировать с нуля каждый раз. Например, используйте некоторую библиотеку матриц, например Jama, для выполнения операций с матрицами. Суммы тривиальны для вычисления.

Кроме того, некоторые коммерческие пакеты, такие как Maple, могут генерировать Java (на самом деле, но конвертировать легко) код для выполнения векторных, матричных и других операций из формул, подобных приведенным выше.

+0

Я использую JMonkey, поэтому есть встроенные методы для векторов, таких как Vector.dot (Vector) или Vector.mult (Vector), единственная проблема - я не знаю, как ее правильно реализовать. – TastyLemons

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