【问题标题】:How to know if a point is inside a complex 3D shape (.ply file)如何知道一个点是否在复杂的 3D 形状内(.ply 文件)
【发布时间】:2013-04-03 11:41:19
【问题描述】:

我正在开发一个 Java 项目,女巫真的要了我的命。经过几天在不同论坛上的研究,寻找我真正需要的东西,我来寻求您的帮助。

我的数据:

  • .ply 文件(包含由许多三角形组成的 3D 形状)
  • 一个点(3D 坐标)

我想知道这个点是否包含在复杂的 3D 形状中。

我把这个问题分成了两个小问题:

  • 如何在内存中表示复杂的 3D 形状? (我找到了几个库,但对于我想做的任务来说似乎真的很复杂:Java3D、JBullet、 JME3...) 我现在不希望我的 java 应用程序显示该对象。

  • 我怎么知道这个点是否在 3D 形状内? (我想从该点开始制作一个 3D 矢量并计算交叉点的数量形状,但我不知道该怎么做,我可以使用女巫库吗?)

也许有更简单的方法可以做到这一点,这也是我来找你的原因。 我现在真的被困住了,我想如果不编写海关库就可以做到这一点......

(对不起我的写作,我不是英语^^)

谢谢你帮助我。

【问题讨论】:

  • 就像你建议的那样,你需要做射线三角形相交并在点的一侧计算它们。因此,将对象加载为可迭代的三角形列表听起来很合理。即使它仅适用于 2D,您也可以使用 Point in Polygon Algorithm 作为参考。

标签: java 3d intersection java-3d jbullet


【解决方案1】:

这是一种方法。不是最好的或最快的,但一旦你有一些工作,它会更容易改进。

如何在内存中表示复杂的 3D 形状?

实现一个快速而肮脏的 PLY 文件格式解析器。这是PLY format spec。加载数据并将其存储在内部:每个 X、Y 和 Z 的数组。这都是纯 Java。

我如何知道这个点是否在 3D 形状内?

根据您的点和其他任意点定义一条线。对于每个多边形,确定它与平面相交的位置 (some help) 以及交点是在多边形内部还是外部 (some help)。按照您的建议,然后计算交叉点的数量以确定该点是在您的 3d 形状内部还是外部。

【讨论】:

  • (我不知道它会这么快地发送我的答案^^)我已经制作了 PLY 解析器,并且我将每个点/三角形存储在内存中,但我不知道如何制作它作为内存中的一个完整对象。问题是我有大约 14000 个三角形。我希望它不会太长。我会尝试实施您的解决方案,非常感谢!
  • 14000 并不是很多三角形。任何超过 2-1000 万的东西都很多。从简单开始。
猜你喜欢
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
相关资源
最近更新 更多