昨天我试图在 3D [F(x,y)] 中绘制一个数学函数。我是怎么做到的?我计算了空间中的一些点(x,y,z),并在那里画了一个白点。
第一个问题: 当我移动场景时(使用 Orbital Control),性能太差了!所以,我一直在寻找解决方案,我意识到 NURBS 曲面可能是我的解决方案。但是,这里的问题是我找不到定义很多控制点的方法。我正在考虑创建一个具有 50 x 50 控制点的 NURBS 曲面(如上图),但我只能创建一个具有 3 x 4 点的 NURBS 曲面。这里的代码:
var nsControlPoints = [
[
new THREE.Vector4 ( -150, 0, 150, 1 ),
new THREE.Vector4 ( 150, 0, 150, 1 ),
new THREE.Vector4 ( 150, 0, -150, 1 ),
new THREE.Vector4 ( -150, 0, -150, 1 ),
new THREE.Vector4 ( -150, 0, 150, 1 )
],
[
new THREE.Vector4 ( -50, 50, 50, 1 ),
new THREE.Vector4 ( 50, 50, 50, 1 ),
new THREE.Vector4 ( 50, 50, -50, 1 ),
new THREE.Vector4 ( -50, 50, -50, 1 ),
new THREE.Vector4 ( -50, 50, 50, 1 )
],
[
new THREE.Vector4 ( -100, -50, 100, 1 ),
new THREE.Vector4 ( 100, -50, 100, 1 ),
new THREE.Vector4 ( 100, -50, -100, 1 ),
new THREE.Vector4 ( -100, -50, -100, 1 ),
new THREE.Vector4 ( -100, -50, 100, 1 )
],
];
var degree1 = 2;
var degree2 = 3;
var knots1 = [0, 0, 0, 1, 1, 1];
var knots2 = [0, 0, 0, 0, 1, 1, 1, 1];
var nurbsSurface = new THREE.NURBSSurface(degree1, degree2, knots1, knots2, nsControlPoints);
var map = new THREE.TextureLoader().load( 'styles/grid.jpg' );
map.wrapS = map.wrapT = THREE.RepeatWrapping;
map.anisotropy = 16;
getSurfacePoint = function(u, v) {
return nurbsSurface.getPoint(u, v);
};
var geometry = new THREE.ParametricGeometry( getSurfacePoint, 20, 20 );
var material = new THREE.MeshLambertMaterial( { map: map, side: THREE.DoubleSide } );
var object = new THREE.Mesh( geometry, material );
object.position.set( - 200, 100, 0 );
object.scale.multiplyScalar( 1 );
group.add( object );
结果:
问题: 你知道是否有办法说:“嘿,NURBS Surface,你应该把这个 50x50 的向量数组/矩阵画出来!”?
第二个问题: 那些函数不存在的点呢?
问题: 我可以在数学函数的函数中绘制一种平面吗?