2013-12-23 4 views
0

Все, что мне нужно - это график функций в 3D с некоторыми точками на поверхности. Как я могу это достичь?Построение 3D-функций и точек в Java

Сначала я попытался jzy3d, но оказалось, что это слишком много усилий для такой основной задачи (особенно потому, что jzy3d не хватает примеров кода и зависимостей с JOGL может быть громоздким). Поэтому я попробовал и для части поверхности функции - это идеально. Но можно ли добавить (x, y, z) точки ..? Наверное, нет. В этом случае, какую другую библиотеку я мог бы использовать?

Я знаю, что этот вопрос может чувствовать себя вне темы, но такое простое построение является функциональность основной и this ответ уже 2-х лет, так что .. теперь, может быть, есть что-то лучше?

ответ

2

Я довольно новичок в stackoverflow, поэтому, возможно, я привожу в него новый (возможно, старый) вид.

Вы можете превратить ваши 3D-очки в 2D-Пойнте, я представить фрагмент кода к нему в одну сторону (но есть много)

//point a (3D) 
double ax = 3; 
double ay = 4; 
double az = 3; 

//point b (2D) 
double bx = 0; 
double by = 0; 

//assumtions 
double cx = 0; //offset 
double cz = 0; //offset 

double scalex = 0.5; 
double scalez = 0.5; 

//trafo 3D -> 2D 
bx = scalex * ax + cz; 
by = scalez * az + cz; 

Я имею в виду http://en.wikipedia.org/wiki/3D_projection

сделайте это со всеми вашими точками, и вы увидите график.

+0

Я не хочу проектировать 3D-точки. Я хочу иметь полностью трехмерный сюжет с функциональной поверхностью, а также некоторые точки, отмеченные на нем. В 3D тоже. – alex

+0

Я не уверен, как вы хотите отображать (сюжет) 3D-точки на 2D-устройстве (экране) ... но если вы отрегулируете параметры cx/cz и scalex/scaley, вы можете вращать, масштабировать, сдвигать (панорамировать) на вашем [прогнозируемом] участке –

+0

О, это то, что вы имеете в виду. Проецирование точек выполнимо, но реализация участка поверхности (http: // goo.gl/CteZjO), которые могут перемещаться/вращаться с нуля, это слишком много работы. Я уверен, что есть библиотеки, которые позаботятся об этом. – alex

3

Orson Charts - это новая (проприетарная) библиотека, которая будет рисовать диаграммы поверхностей без зависимости от JOGL (она содержит программный рендерер на основе Java2D, поэтому нет зависимостей, кроме стандартного времени выполнения Java). Поверхностный рендер принимает образцы из функции y = f (x, z), поэтому может возникнуть проблема с вашим требованием, где вы говорите:

Но можно ли добавить (x, y, z) точки ..?

Однако нетрудно адаптировать код для работы с такими данными, поэтому, если Orson Charts выглядит как-то, что вы можете использовать, свяжитесь со мной.

+0

Привет, Давид, я хотел бы получить поверхность из сетки x, y, z вместо того, чтобы требовать предоставления непрерывной функции. Однако, еще одна вещь, которую я хотел бы сделать (и то, что я думаю, что OP получает), имеет две «серии» на одной 3D-карте - поверхность с другими (возможно, не связанными) точками разброса x, y, z одновременно. Поддерживает ли Орсон это? Спасибо! –

1

Есть Jzy3d examples on Github, показывающие, как рисовать поверхности и рассеивать участки.

Вы увидите, что конфигурация Maven довольно проста, как вы должны просто объявить зависимость к jzy3d (JOGL быть транзитивно импортирована):

<dependencies> 
    <dependency> 
     <groupId>org.jzy3d</groupId> 
     <artifactId>jzy3d-api</artifactId> 
     <version>0.9.2-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

Вы только должны объявить хранилище Jzy3d как следовать

<repositories> 
    <repository> 
    <id>jzy3d-snapshots</id> 
    <name>Jzy3d Snapshots</name> 
    <url>http://maven.jzy3d.org/snapshots</url> 
    </repository> 
    <repository> 
    <id>jzy3d-releases</id> 
    <name>Jzy3d Releases</name> 
    <url>http://maven.jzy3d.org/releases</url> 
    </repository> 

Если данный пример не достаточно, вы также можете взглянуть на developer guide.

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