JME3提供了Curve类,用于生成曲线网格。利用它可以很容易绘制3维空间曲线。
package com.ruanko.jme3;
import java.util.Random;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.debug.Arrow;
import com.jme3.scene.debug.Grid;
import com.jme3.scene.shape.Curve;
import com.jme3.system.AppSettings;
/**
* 3维空间曲线
* @author yanmaoyuan@ruanko.com
*/
public class ThreeDCurve extends SimpleApplication {
private Geometry curveGeom;// 曲线A
private Vector3f camLocVctr = new Vector3f(100.0f, 32.0f, 0.0f);
//
public static void main(String[] args) {
ThreeDCurve app = new ThreeDCurve();
// 初始化应用程序
AppSettings settings = new AppSettings(true);
settings.setHeight(768);
settings.setWidth(1024);
app.setSettings(settings);
app.setShowSettings(false);
app.start();
}
@Override
public void simpleInitApp() {
this.setDisplayFps(false);
this.setDisplayStatView(false);
// 背景色
viewPort.setBackgroundColor(ColorRGBA.White);
// 摄像机初始位置
cam.setLocation(camLocVctr);
cam.lookAt(Vector3f.ZERO, cam.getUp());
flyCam.setMoveSpeed(100.0f);
// 显示3维坐标系
showNodeAxes(250);
// 生成坐标系网格
Geometry g = new Geometry("wireFrameDebugGrid1", new Grid(100, 100, 5.0f));// 5WU
Material m = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
m.getAdditionalRenderState().setWireframe(true);
m.setColor("Color", ColorRGBA.LightGray);
g.setMaterial(m);
g.center().move(Vector3f.ZERO);// 中心坐标
rootNode.attachChild(g);
// 生成一个有100个顶点的曲线
Vector3f[] points = new Vector3f[100];
for (float i = 0; i < 100; i++) {
// 这里利用三角函数生成顶点。
// 随便写的,可以改掉。
points[(int) i] = new Vector3f(i, i + 10
* FastMath.sin(i / 10 * FastMath.PI), i + 10
* FastMath.sin(i / 25 * FastMath.PI));
}
Curve curve = new Curve(points, 1);// 曲线A
curveGeom = new Geometry("曲线A", curve);
// 设置材质
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Red);
curveGeom.setMaterial(mat);
rootNode.attachChild(curveGeom);
}
@Override
public void simpleUpdate(float tpf) {
/////// 下面的代码会重新生成曲线A的所有顶点 ///////////
Random rand = new Random();
Vector3f[] points = new Vector3f[100];
float base = rand.nextFloat() * 10;
for (int i = 0; i < 100; i++) {
// 这里利用三角函数生成顶点。
// 随便写的,可以改掉。
float x = i + base;
float y = i + rand.nextFloat() * 10
* FastMath.sin(i / 10 * FastMath.PI);
float z = i + rand.nextFloat() * 10 + rand.nextFloat() * 10
* FastMath.sin(i / 25 * FastMath.PI);
points[i] = new Vector3f(x, y, z);
}
///////////////////////////////////
// 刷新曲线A
Curve curve = new Curve(points, 1);// 曲线A
curveGeom.setMesh(curve);
curveGeom.updateModelBound();
}
public void showNodeAxes(float axisLen) {
//
Vector3f v = new Vector3f(axisLen, 0, 0);
Arrow a = new Arrow(v);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Red);
Geometry geom = new Geometry(rootNode.getName() + "XAxis", a);
geom.setMaterial(mat);
rootNode.attachChild(geom);
//
v = new Vector3f(0, axisLen, 0);
a = new Arrow(v);
mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Green);
geom = new Geometry(rootNode.getName() + "YAxis", a);
geom.setMaterial(mat);
rootNode.attachChild(geom);
//
v = new Vector3f(0, 0, axisLen);
a = new Arrow(v);
mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setColor("Color", ColorRGBA.Blue);
geom = new Geometry(rootNode.getName() + "ZAxis", a);
geom.setMaterial(mat);
rootNode.attachChild(geom);
}
}
效果
- 大小: 84.6 KB
分享到:
相关推荐
在三维空间中,通常涉及两个自变量和一个因变量。 **MATLAB中的拟合工具:** MATLAB提供了强大的工具来进行曲线拟合,其中`lsqcurvefit`函数特别适用于非线性曲线拟合。 #### 二、非线性三维曲线拟合步骤 **1. ...
三维曲线图在三维空间显示曲线而不是曲面,在前面板窗口新建的三维曲线图外观与三维曲面图相同,如图1所示。 三维曲线图在程序框图中包括控件3D Curve和3D Curve.vi。 3D graph:输入ActiveX容器端子,表示3D...
1. 面上草图:在模型面上绘制曲线,然后将其投影到三维空间中形成曲线。 2. 草图上草图:在两个相交的基准面上分别绘制草图,系统会沿着每个草图所在平面的垂直方向投影生成曲面,当这两个曲面在空间中相交时,形成...
使用qwtPlot3D实现三维曲线、轨迹绘制的例子,使用qt基于c++开发,可以直接运行,无需额外配置,里面包含了所有需要的库文件和头文件,弄了好久才弄出来的,我没有在网上找到其他的类似的代码,在一些博主和热心人的...
- “Crv2View”命令是生成三维曲线的核心工具,操作者需要理解此命令的工作原理及其在生成三维空间曲线时的应用方式。 - 在处理地铁线路这样的大型基础设施时,所生成的三维模型需要足够精确,这样才能用于后续的...
三维螺旋曲线是一种在三维空间中呈现出螺旋状轨迹的数学对象。这种曲线通常由参数方程定义,其中参数可以控制螺旋的旋转次数、半径变化、高度变化等因素。在LabVIEW中,我们可以构建一个虚拟仪器(VI)来动态调整...
在编程领域,尤其是在数据分析、可视化和图形用户界面(GUI)设计中,绘制二维坐标曲线是一项基本且重要的任务。本主题将深入探讨如何使用C#语言实现这一功能,并结合提供的源码进行分析。C#,作为一种面向对象的...
这个例子中的"3D-Projection"项目显然提供了一个实际的示例,教你如何使用C#来实现三维空间中的曲线描绘。以下是关于这个主题的一些详细知识点: 1. **C#图形库**:C#标准库并不直接支持3D图形绘制,但可以通过引入...
6. 应用扩展:等距方法还可以应用于三维空间中的曲线和曲面,以及非均匀 rational B-spline (NURBS) 曲线等更复杂的几何模型。 在“二维组合曲线的等距方法研究.exe”这个文件中,可能包含了对上述理论的深入探讨、...
在这个框架下,物体的运动轨迹被视为四维空间中的曲线,而不是三维空间中的直线。这一理论成功解释了引力现象,并预言了黑洞和宇宙大爆炸等现象。 5. 弥散空间和超弦理论:在物理学的量子场论中,四维空间有时被...
3. 定义Series:每条曲线对应一个Series对象,可以是LineSeries或其他类型,根据需求选择。 ```csharp var series1 = new LineSeries { Title = "曲线1" }; var series2 = new LineSeries { Title = "曲线2" }; ```...
以空间螺旋线为例,展示MFC中使用TeeChart绘制三维曲线的程序。包含https://blog.csdn.net/carlos_soler/article/details/78614054#7930033中的源程序
在C#编程环境中,绘制二维曲线是一项常见的任务,特别是在数据可视化、科学计算或者游戏开发等领域。本项目提供了一个实现方式,无需依赖外部数据库,能够直接根据给定的数据生成二维曲线。下面将详细介绍如何使用C#...
网格线则有助于我们理解曲线在三维空间中的位置,可以设置透明度和线条样式以增强视觉效果。 此外,我们还可以调整光照、视角和相机参数,使得图形更加立体和真实。例如,通过调整光照角度可以突出曲线的特征;改变...
最后,`plot3(X,Y,Z)`绘制了计算出的三维B样条曲线。通过改变控制点数组`x`, `y`, `z`,可以得到不同形状的B样条曲线。 总结来说,这段MATLAB代码实现了一个基本的三维B样条曲线绘制功能。它通过控制点和参数变量`t...
文件中提到的“三维曲线”指的是在三维空间中绘制的曲线,这种曲线通常需要三个坐标轴(通常是X、Y和Z轴)来定义其位置。在LabVIEW中,绘制三维曲线可以使用ActiveX控件或者特定的VI(虚拟仪器)来实现。 3. ...
空间曲线曲率是数学几何中的一个重要概念,特别是在三维空间解析几何和微分几何的研究中具有广泛应用。MATLAB作为一款强大的数学计算软件,提供了方便的工具和函数来处理这类问题。这个压缩包“基于MATLAB的空间曲线...
二维数据或者图片堆叠在三维空间的表示,图片堆叠方便查看 类似origin里面的瀑布图的方法,只是这是在matlab里面实现。 matlab多张图片同时在三维空间中显示,沿着某一个坐标轴 matlab在一个坐标系画不同三维图综合...