2013-12-23 72 views
0

我需要的是一个3D表面上的点的3D功能图。我怎样才能实现它?在Java中绘制3D功能和点

一开始我尝试jzy3d但事实证明,它是这样一个基本任务(尤其是因为jzy3d缺少代码示例和依赖与JOGL可能是麻烦的)太多精力。所以我试了Java Surface Plot和功能表面部分 - 这是完美的。但是有可能添加(x,y,z)点..?我猜不会。在这种情况下,我可以使用哪些其他库?

我知道这个问题可能会觉得偏离主题,但这种简单的绘制是基本功能和this答案已经2岁的,所以..也许有更好的东西了吗?

回答

2

我对于stackoverflow很新,所以也许我会引入一些新的(矿石也许是旧的)视图。

您可以将您的三维点到二维点,我会以某种方式提交一段代码,它(但也有不少)

//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点...但是如果您调整参数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