【发布时间】:2018-03-06 13:59:00
【问题描述】:
我正在尝试找到以下问题的解决方案,但尚不清楚如何解决。想象一下,我在空间中有以下几点,如下图所示:
如果我认为我唯一已知的信息是点位置及其法线,我想确定两个点(将第一个点的位置作为参考)是否彼此面对。例如从上图中的点a、b、c、d 和e 我有:
点 a 面向点 c 和 e,但不面向点 b 和 d。
点 b 面对点 d 和 e,但不面对点 a 和 c。
点 c 面向点 a,但不面向点 b、d 和 e。
点 d 面对点 b 和 e,但不面对点 a 和 c。
最后
点 e 面向点 a、b 和 d,但不面向点 c。
我的第一个想法是通过使用here 提出的解决方案来处理每对的两个法线向量之间的符号角度,但这对某些对有效,而对其他对无效。关于什么两点相互面对的想法是,如果我们将一个点视为原点,那么如果另一点在原点的 180 度视野内并且其法线向量向内移动(类似于“向") 原点。
任何可以提供帮助的想法。
谢谢。
更新:
尝试更清楚一点并回答下面的一些 cmets。原则上,它在空间中的点对应于面部的质心。但是,我事先没有此信息(即每个点对应于面的中心,或面及其顶点的列表)。所以在更高的层次上,如果我们正在处理面孔,问题将是如何确定两个面孔是否彼此可见,但正如我所说,我现在拥有的唯一信息是空间中的实际点及其法线.
样本点:
a = [26415.3720833199 11986.0504166605 739];
na = [0 0 1];
b = [27263.8100000023 11103.1983333336 1512.50000000021];
nb = [0.102791963903622 -0.994702876318771 0];
c = [28059.5700000001 11185.4316666667 962.499999999998];
nc = [-0.102791963903623 0.994702876318771 -9.06557542353252e-16];
d = [26606.7112499615 10390.7487916521 739];
nd = [0 0 1];
e = [27792.4499999996 9225.36499999984 2782];
ne = [0 0 -1];
【问题讨论】:
-
我不懂规则。为什么a面对c和e而不是b和d?图片看不清楚
-
我没有得到“点正对”。对我来说,两点总是面对。还为我定义了相对于表面的法线。请解释。请提供一个包含 3 个点的示例(应该足够了,如果没有,请提供更多)、它们的坐标以及您要达到的目标。
-
@all 我添加了更多信息。 @Ander Biguri
a面对c和e,因为如果我们在点a设置一个平面,其法线与点a相同,那么两者都在 180 度 FOV 内并指向内部。另一方面,b点位于 FOV 内,但指向外部,d点位于同一平面上,并且也指向与点a相同的方向。 @PTRK 当我说“面对”时,根据他们的正常情况,他们是否看到对方。您是对的,所有点都彼此面对,但根据它们的法线,其中一些不应该。我希望我很清楚。 -
@ThT 虽然我不太明白,但您只是描述了解决它所需的数学方法。定义
isinFOV(a,b)和pointingDirection(a,b,na,nb),你就得到了答案 -
@AnderBiguri 你怎么定义
pointingDirection(a,b,na,nb)能详细说明一下吗?
标签: matlab space points normals