有人可以向我解释meshgrid
Numpy功能的目的是什么?我知道它会为绘图创建某种坐标网格,但我无法真正看到它的直接好处.
我正在学习Sebastian Raschka的"Python机器学习",他正在使用它来绘制决策边界.请参见此处的输入11 .
我也从官方文档中尝试过这段代码,但是,输出对我来说并没有多大意义.
x = np.arange(-5, 5, 1)
y = np.arange(-5, 5, 1)
xx, yy = np.meshgrid(x, y, sparse=True)
z = np.sin(xx**2 + yy**2) / (xx**2 + yy**2)
h = plt.contourf(x,y,z)
Run Code Online (Sandbox Code Playgroud)
如果可能的话,请向我展示很多现实世界的例子.
我试图了解如何将子网格分组/链接到父级.我希望能够:
我唯一的背景是在Second Life中使用LSL来操作对象中的链接prims.我想我不想合并网格,因为我想保持对每个孩子的控制(悬停,纹理,旋转,缩放等).
有关于此的任何好的教程吗?用THREE.Object3D()实现这个,是吗?
谢谢,丹尼尔
我一直在研究各种各样的地方,试图获得网格的宽度和高度,但我已经能够找到任何有用的东西.我有一个我导入的collada模型,我想要做的就是在Webgl/Three.js单位中获取它的尺寸,以便我可以在我的简单游戏中计算碰撞.那么我如何在THREE.js中获取网格的宽度和高度呢?
似乎有很多OBJ网格文件加载器已经开发出来供Android平台上使用.我想知道是否有人有这方面的经验,并可以提供一个似乎最适合他们的建议.
这是我的标准:
以下是我发现的一些库.
我也很乐意听到不在此列表中的其他人.
我有一组定义3D轮廓的3D点.我想要做的是获得与此轮廓相对应的最小曲面表示(请参阅维基百科中的最小曲面).基本上这需要求解非线性偏微分方程.
在Matlab中,使用该pdenonlin
函数几乎是直截了当的(参见Matlab的文档).可以在此处找到用于解决最小表面问题的示例:单位磁盘上的最小表面问题.
我需要在Python中实现这样的实现,但我知道我还没有找到任何关于如何实现这一目标的Web资源.
任何人都可以指出这种实施的任何资源/例子吗?
谢谢,米格尔.
UPDATE
我想要找到的3D表面(理想情况下是三角形网格表示)受这组3D点的限制(如图所示,这些点位于最佳拟合平面中):
好吧,做一些研究我发现这个最小的表面问题与双调和方程的解决方案有关,我还发现薄板样条是这个方程的基本解.
所以我认为这种方法是尝试使用薄板样条来拟合表面的稀疏表示(由点的3D轮廓给出).我在scipy.interpolate中找到了这个例子,其中使用薄板样条插值散射数据(x,y,z格式)以获得均匀网格(XI,YI)上的ZI坐标.
出现两个问题:(1)薄板样条插值是否是从三维轮廓点集计算表面问题的正确方法?(2)如果是这样,如何使用NON-UNIFORM网格在scipy上执行薄板插值?
再次感谢!米格尔
更新:MATLAB中的实现(但它不适用于SCIPY PYTHON)
我使用Matlab的函数跟踪了这个例子,tpaps
并在均匀网格上获得了适合我轮廓的最小曲面.这是Matlab的结果(看起来很棒!):
但是我需要在Python中实现它,所以我使用包scipy.interpolate.Rbf和thin-plate
函数.这是python中的代码(XYZ
包含轮廓中每个点的3D坐标):
GRID_POINTS = 25
x_min = XYZ[:,0].min()
x_max = XYZ[:,0].max()
y_min = XYZ[:,1].min()
y_max = XYZ[:,1].max()
xi = np.linspace(x_min, x_max, GRID_POINTS)
yi = np.linspace(y_min, y_max, GRID_POINTS)
XI, YI = np.meshgrid(xi, yi)
from scipy.interpolate import Rbf
rbf = Rbf(XYZ[:,0],XYZ[:,1],XYZ[:,2],function='thin-plate',smooth=0.0)
ZI = rbf(XI,YI)
Run Code Online (Sandbox Code Playgroud)
然而,这是结果(与Matlab中获得的结果完全不同):
很明显,scipy的结果与最小的表面不对应. …
我正在寻找一个好的3D网格库
我已经尝试了CGAL和OpenMesh,但在最后一点都失败了.
特别是CGAL,即使使用最先进的代码分析工具也无法遵循.
到目前为止,我正在认真考虑拉自己的.
我的偏好是C++,但我对其他选项持开放态度.
在一些模拟程序中,我们根据点生成对象表面,每个点具有3D坐标,并且向量表示该点处表面的法线.出于可视化目的,我们希望生成由三角形组成的网格; 每三个关闭点形成一个正常的三角形.然后我们可以将这些信息发送到一些标准的可视化程序,这些程序可以像VMD(Visual Molecular Dynamics)一样呈现表面.
我们想知道哪个是最快/可用的算法.
我有一个立方体几何和一个网格,我不知道如何改变宽度(或高度......我可以改变x,y和z).这是我现在所拥有的片段:
geometry = new THREE.CubeGeometry( 200, 200, 200 );
material = new THREE.MeshBasicMaterial( { color: 0xff0000, wireframe: true } );
mesh = new THREE.Mesh( geometry, material );
// WebGL renderer here
function render(){
mesh.rotation.x += 0.01;
mesh.rotation.y += 0.02;
renderer.render( scene, camera );
}
function changeStuff(){
mesh.geometry.width = 500; //Doesn't work.
mesh.width = 500; // Doesn't work.
geometry.width = 500; //Doesn't work.
mesh.position.x = 500// Works!!
render();
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
编辑
找到了解决方案:
mesh.scale.x = 500;
Run Code Online (Sandbox Code Playgroud) 假设您有一个3维对象,以某种常见文件格式表示为3d网格.你将如何设计一种算法将网格分解为一个或多个2d'网' - 也就是说,可以剪切和折叠以创建原始3d对象的二维表示.
除此之外,该算法还需要考虑:
明显的退化情况就是每面创建一个网,边缘有一半.这显然不是理想的:理想的情况是单个连续网.复杂形状的现实很可能在中间.
我意识到找到最佳网络(最少网络/最少页面)可能计算成本很高,但是找到"足够好"的网络的良好启发式就足够了.