3

如何使用数学方程在 JavaFX 中绘制 3D 图形,基本上是 2 个变量函数,例如:z=2xy和其他 3D 图形?
有没有办法在 JavaFX 中做到这一点,或者我需要另一个 Java 库。

4

3 回答 3

3

正如@Roland 指出的那样,JavaFX 3D API 不包括基本元素,例如TriangleMesh,您可以使用这些元素来创建复杂的形状,例如 3D 图形。

事实上,绘制 2D 函数f=f(x,y)是了解其TriangleMesh工作原理的一个非常好的用例。

基本上你将需要:

一个函数

该功能可以使用内置的Function功能接口表示:

Function<Point2D,Number> function2D;

所以对于任何一对坐标 (x,y) 它将返回一个值:

double value = function2D.apply(new Point2D(x,y)).doubleValue();

网格或坐标范围

如果您考虑一个矩形网格和给定数量的分区,您将有办法获取所有绘图(x,y)点,并且使用该函数,您将拥有第三个坐标z来生成网格所需的 3D 点。

TriangleMesh triangleMesh = new TriangleMesh();
triangleMesh.getPoints().setAll(x0,y0,z0, x1,y1,z1, ...);

如果您想将图像或密度图作为纹理,或者现在只是一组空坐标,则需要提供纹理坐标:

triangleMesh.getTexCoords().setAll(0,0);

最后,您需要提供面,即三角形。您只需要获取网格中每个三角形的顶点索引,就像在这个示例中一样,在这种情况下使用 0 作为纹理索引:

面孔

triangleMesh.getFaces().setAll(0,0,20,0,21,0,...);

你将拥有你的网格,准备好在场景中渲染。

第三方库

您可以查看FXyz库,您会在其中找到SurfacePlotMesh,该库的功能与上述完全一样,包括纹理坐标。FXyz Sampler是一个应用程序,用于可视化此库中的大多数可能性。这是绘制函数的示例:

FXyz

对于其他 3D 形状,请查看库中其余的 3D 复杂形状。

你可以看看VRL Studio,它包括一个很棒的 3D 功能绘图仪等等。

于 2015-08-01T09:32:52.143 回答
1

我编写了一个 JavaFX 演示应用程序(嵌入在 swing 中),它可以绘制 3d 点。您可以使用您的函数创建/计算一些 3d 点,而不仅仅是绘制它。查看生成点的 StarterFrame 类。更多的点意味着更详细的情节。也许这可以帮助您自己编写一些东西。否则我会推荐一个图书馆。

https://github.com/adihubba/javafx-3d-surface-chart

高斯正态分布

于 2017-01-05T15:47:24.813 回答
0

JavaFX 没有绘制 3d 图形的内置机制。您必须使用 3rd 方库。

于 2015-08-01T04:33:03.647 回答