[MATLAB]: 如何在数学和可视化方面重现新国王十字站“西部大厅”的三维曲面?

4

有没有人能给我一些入门的提示?我想要从中学习(即不想偷懒,让别人为我回答)。

我想要深入了解数学三维曲面。我的个人项目是在MATLAB中制作一个走廊结构的3D曲面/图形。

我找到了一个链接,里面有它几何形状的好图片这里。我并不期望完美地完成这个项目,但我希望能够接近!

在完成这个练习的最后,我希望能够得到几何形状的数学定义以及表面的视觉呈现。这可能涉及笛卡尔方程、参数方程、矩阵等。

非常感谢任何帮助!


2
我不确定目标是什么 - 您是手动代数地建模表面函数并以图像作为参考,还是正在寻找一种计算机视觉技术,可以从图片中推断出三维结构?在第二种情况下,如果您知道(或可以近似)每张图片中相机的位置和方向,可以尝试光度立体成像。它有一些限制,但理论上可能有效。 - Junuxx
谢谢您的评论!也许我最初应该包括我想在获得正确几何形状之后做什么(在笛卡尔三维表面函数的情况下),那就是将一组点(x,y)垂直地(z)投射到3D表面上。我想我一开始考虑的是您的第一种解决方案......但您的第二种解决方案听起来很有趣!但主要是我想要一个数学模型/定义这个结构,这将使我能够在MATLAB中整洁地编程。出于兴趣......我的下一步是使用遗传算法生成一个遵循相同形式的不同结构! - dnk8n
2个回答

3
为MATLAB提供一些具体的建议:
我会从你链接的网页中加载“section”图像,并在MATLAB图形窗口中显示它。然后您可以尝试在上面绘制线条,直到找到一个很好的拟合线。因此,您可以执行以下操作:
A = imread('~/Desktop/1314019872-1244-n364-1000x707.jpg');
imshow(A)
hold on
axis on

%# my guess at the function - obviously not a good fit
x = [550:900];
plot(x, 0.0001*x.^2 + 300)  

enter image description here

当然,您可能想移动原点的位置或裁剪图片等等。
作为试错方法的一种更好的替代方案,您可以描绘该部分的轮廓(例如通过使用类似 ginput 的点击点的方式),然后使用 MATLAB 的 拟合曲线 工具之一(例如 fit)将函数拟合到数据上。
最终的 3D 形状在我看来(粗略浏览)是围绕中心轴的截面形状的 3D 旋转。因此,使用 柱坐标系 可能是一个好主意。
你可以使用 surf 或者 mesh 函数来完成你的 3D 图形绘制。

2
到目前为止,我最接近的拟合是一个对数减去一条直线加上一个平方再加上一个高斯函数;y = 33*log(x) - 1.0*x + 0.00162*x**2 + 24.*2.71**(-(x-145)**2/(80.**2)),其中曲线的最左端点为0,0。 - Junuxx
谢谢Bill。我对大多数MATLAB函数都很陌生,因为我只知道我以前用过的几个。我认为我的主要问题是不知道我可以使用哪些工具。你的建议在这方面帮助了我很多。我同意柱坐标系是正确的选择。这个走廊的形式问题在于它的底部只围绕一个半圆的非常小的部分旋转,而它的顶部则围绕整个半圆旋转(这有意义吗!?)。你可以注意到,基础成员连接到地面时几乎沿着一条直线而不是半圆形。 - dnk8n

0
我会先定义一个函数,为每个x、y坐标定义是否存在点z,如果存在,则确定其高度。

这个形状让我想起了一根木棍或平方根。


1
恢复功能实际上只是1D,y = f(x),其中x是距中心的距离。可以将该函数沿垂直轴车削以获得屋顶形状。 - Junuxx
感谢Junuxx费心地拟合横截曲线,这非常有帮助。我同意应该围绕垂直轴旋转(我已经用SketchUp进行了一些实验来发展想法)。问题在于它的底部不是一个简单的半圆形...也就是说,在曲线的顶端似乎旋转得更多,在底部旋转得更少。 - dnk8n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接