【问题标题】:Simple line-plane intersection on a fixed z-axis?固定z轴上的简单线平面交点?
【发布时间】:2011-05-26 13:22:58
【问题描述】:

如果我知道飞机总是在同一个 z 轴上(所以它不能旋转),以及它的宽度/高度,那么现在和那里是什么,一种快速的方法来检查我的线在平面中的相交位置是无限的吗?另外,我的“线”实际上不是一条线,而是一个 3d 矢量,所以“线”可以无限远。

这里是依赖两点的代码: (p1 和 p2 是直线的起点和终点。plane_z = 平面所在的位置)

k1 = -p2.z/(p1.z-p2.z-plane_z);
k2 = 1.0f-k1;
ix = k1*p1.x + k2*p2.x;
iy = k1*p1.y + k2*p2.y;
iz = plane_z; // where my plane lays

另一个使用矢量的解决方案(我也像第一个示例一样使用两个点,“p2.x-p1.x”等是矢量计算):

a = (plane_z-p1.z)/(p2.z-p1.z);
ix = p1.x + a*(p2.x-p1.x);
iy = p1.y + a*(p2.y-p1.y);
iz = plane_z;

Edit3:添加了Orbling的方案,速度稍快,不一定依赖两点。

【问题讨论】:

  • @Orbling,这是不一样的,因为我没有一条线,我只有一条线的方向,所以我希望这会使计算更简单。另外,我不明白维基百科上的那些公式......如果我已经是数学大师,我为什么要来这里......?
  • @Rookie:不需要语气。如果你只有方向而没有意义。那么你所拥有的是无限多的线/平面,所有这些线/平面都与你的主平面有无限的交点。没有交点,除非线实际上绑定到特定位置。
  • @Orbling,我只有一架飞机和一条线。我在想是否可以在不指定我的线的开始和结束位置的情况下以某种方式计算,因为这些是无关紧要的:我应该总是能够得到相交点(除了 2 种情况)。问题是:我应该能够在没有线的终点的情况下计算这个,因为我如何真正得到终点......?我必须以某种方式计算,这是无用的计算,因为我离飞机多远并不重要。好吧,我不是数学家,所以也许这甚至是不可能的。这就是我问的原因。
  • @Rookie,你不需要你的行的开始和结束位置。只是它上面的任何一点。它经过的一个点。

标签: c++ algorithm math line-intersection


【解决方案1】:

您可以像http://paulbourke.net/geometry/planeline/ 那样实施一个严格的解决方案,然后应用您的简化。在代数解(#2)中,A 和 B 在你的情况下为零(如果我理解正确的话)

平面总是在同一个z轴上(所以不能旋转)

注意:你的线应该是一个点和一个方向,还是两个点对吧?

【讨论】:

  • 他说他没有一点,只有一个方向——但那不是一条线。所以也许他有一个观点、起源或对象中心。 :-/
  • @Rookie,你能告诉我们更多关于你在这里想要达到的目标,背景等等......
  • 也许这甚至不可能,似乎我必须有两点,但正如我在我的问题 cmets 中提到的,烦恼是我必须计算我的行的结束位置才能得到交点。我希望这可以以某种方式进行优化,我有交点的工作代码,但它仍然需要两个点。
  • @Rookie:听起来完全有可能,只是你需要一个点而不是起点,而不是终点,只需要线穿过的任何给定点,否则线可以移动到任何地方,不是吗?如果只是一个方向。这个方向是如何描述的,它是从某个地方来的吗?
  • @Orbling,哦,是的,你是对的,它当然需要一个起始位置。但不是结束位置,因为我的代码现在需要。介意看看我的代码,看看是否可以消除结束位置? (现在编辑我的问题帖子)。
猜你喜欢
  • 1970-01-01
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-23
相关资源
最近更新 更多