【问题标题】:Parse text to show 3D triangles解析文本以显示 3D 三角形
【发布时间】:2014-07-03 08:34:41
【问题描述】:

(使用 Octacve)我有一个以这种方式定义三角形顶点的文本文件:

((x11, y11, z11), (x12, y12, z12), (x13, y13, z13))((x21, y21, z21), (x22, y22, z22), (x23, y23, z23))...((xn1, yn1, zn1), (xn2, yn2, zn2), (xn3, yn3, zn3))

这是 3D 空间中的三角形列表,每个三角形都定义为 ((xn1, yn1, zn1)(xn2, yn2, zn2)(xn3, yn3, zn3))

如何在 Octave 中导入此文件以查看生成的网格?我知道我可以使用trimesh,但我无法解析此文件以检索点坐标。

编辑:这是一个带有一些三角形的真实文件:

((-0.780869, -1.56174, 4.68521), (-0.776988, -1.08169, 4.81936), (-0.776988, -2.02627, 4.5045))((-0.776988, -1.08169, 4.81936), (-0.765386, -0.590883, 4.90561), (-0.776988, -2.02627, 4.5045))((-0.776988, -2.02627, 4.5045), (-0.765386, -0.590883, 4.90561), (-0.765386, -2.47066, 4.27902))((-0.765386, -0.590883, 4.90561), (-0.746177, -0.0942074, 4.94311), (-0.765386, -2.47066, 4.27902))((-0.765386, -2.47066, 4.27902), (-0.746177, -0.0942074, 4.94311), (-0.746177, -2.8905, 4.01101))((-0.746177, -0.0942074, 4.94311), (-0.719552, 0.403404, 4.93148), (-0.746177, -2.8905, 4.01101))((-0.746177, -2.8905, 4.01101), (-0.719552, 0.403404, 4.93148), (-0.719552, -3.28161, 3.70314))((-0.719552, 0.403404, 4.93148), (-0.685776, 0.897006, 4.87084), (-0.719552, -3.28161, 3.70314))((-0.719552, -3.28161, 3.70314), (-0.685776, 0.897006, 4.87084), (-0.685776, -3.64011, 3.35847))((-0.685776, 0.897006, 4.87084), (-0.645184, 1.38169, 4.76179), (-0.685776, -3.64011, 3.35847))((-0.685776, -3.64011, 3.35847), (-0.645184, 1.38169, 4.76179), (-0.645184, -3.96243, 2.98042))((-0.645184, 1.38169, 4.76179), (-0.59818, 1.85265, 4.60542), (-0.645184, -3.96243, 2.98042))((-0.645184, -3.96243, 2.98042), (-0.59818, 1.85265, 4.60542), (-0.59818, -4.24537, 2.57274))((-0.59818, 1.85265, 4.60542), (-0.545231, 2.30519, 4.40327), (-0.59818, -4.24537, 2.57274))((-0.59818, -4.24537, 2.57274), (-0.545231, 2.30519, 4.40327), (-0.545231, -4.48612, 2.1395))((-0.545231, 2.30519, 4.40327), (-0.486864, 2.73482, 4.15737), (-0.545231, -4.48612, 2.1395))((-0.545231, -4.48612, 2.1395), (-0.486864, 2.73482, 4.15737), (-0.486864, -4.68228, 1.685))((-0.486864, 2.73482, 4.15737), (-0.423657, 3.13728, 3.87014), (-0.486864, -4.68228, 1.685))((-0.486864, -4.68228, 1.685), (-0.423657, 3.13728, 3.87014), (-0.423657, -4.83191, 1.21375))((-0.423657, 3.13728, 3.87014), (-0.356241, 3.50855, 3.54445), (-0.423657, -4.83191, 1.21375))((-0.423657, -4.83191, 1.21375), (-0.356241, 3.50855, 3.54445), (-0.356241, -4.93351, 0.730433))((-0.356241, 3.50855, 3.54445), (-0.285283, 3.84496, 3.18354), (-0.356241, -4.93351, 0.730433))((-0.356241, -4.93351, 0.730433), (-0.285283, 3.84496, 3.18354), (-0.285283, -4.98609, 0.23986))((-0.285283, 3.84496, 3.18354), (-0.211491, 4.14315, 2.79099), (-0.285283, -4.98609, 0.23986))((-0.285283, -4.98609, 0.23986), (-0.211491, 4.14315, 2.79099), (-0.211491, -4.98911, -0.253097))((-0.211491, 4.14315, 2.79099), (-0.135596, 4.40016, 2.3707), (-0.211491, -4.98911, -0.253097))((-0.211491, -4.98911, -0.253097), (-0.135596, 4.40016, 2.3707), (-0.135596, -4.94255, -0.743539))((-0.135596, 4.40016, 2.3707), (-0.0583544, 4.61344, 1.92684), (-0.135596, -4.94255, -0.743539))((-0.135596, -4.94255, -0.743539), (-0.0583544, 4.61344, 1.92684), (-0.0583544, -4.84686, -1.22659))

【问题讨论】:

  • 您能否在您的帖子中添加(用于测试目的)文件中的一些真实数据?
  • 我添加了一些真实数据(即使它们可能是随意的三角形。事实上我需要测试这些三角形是否会创建一些真实的对象)。
  • 通用结构和你给出的例子格式不一样。在您的通用结构中,顶点不是用逗号分隔的,而在示例中它们是。哪个是正确的文件格式?
  • 这是我的错误,对不起。我会更正结构。

标签: matlab geometry octave mesh


【解决方案1】:

(这是用 MATLAB 测试的,但在 Octave 中也应该可以正常工作)

要解析文件,您可以使用以下函数:

function A = fparse_triangle(fname)
        f = fopen(fname, 'r');
        A = reshape(fscanf(f, '((%f, %f, %f)(%f, %f, %f)(%f, %f, %f))'),3,3,[]);
        fclose(f);
end

结果将是一个 3×3×n 矩阵,在第一个索引上具有顶点坐标(XYZ),在第二个索引上具有三角形的顶点(第一个、第二个、第三个),在第三个索引上具有三角形。

稍后编辑

此替代方案将考虑用逗号分隔的顶点,如最近添加的示例:

function A = fparse_triangle_alt(fname)
        f = fopen(fname, 'r');
        A = reshape(fscanf(f, '((%f, %f, %f), (%f, %f, %f), (%f, %f, %f))'),3,3,[]);
        fclose(f);
end

注意

请注意,从这个到trimesh 调用涉及更多处理。如果您需要帮助,请告诉我。

【讨论】:

  • 谢谢,但我收到以下错误:error: reshape: SIZE is not divisible by the product of known dimensions (= 9)
  • @Jepessen 整个文件的结构是您描述的那个,还是只是其中的一部分?如果它是整个文件的结构,你确定这是正确的(最多空格、换行符、制表符等)吗?如果没有,你能给我们一个文件样本吗?
  • 标头中有一个示例文件。原样,没有空格或换行符。
  • @Jepessen 请查看我的帖子,我提出了一个替代方案,它考虑了您提出的原始通用结构的更改。它使用您在 MATLAB 中发布的文件内容对我有用。希望在 Octave 中也可以。
  • 谢谢,这是我需要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多