旋转矩形直到它到达三角形,并确定交点

时间:2015-11-12 06:04:46

标签: python algorithm 3d geometry computational-geometry

  • 此问题出现在3D空间中。
  • 有一个由4个顶点定义的矩形。我们围绕其中一侧旋转。
  • 有一个三角形,由3个顶点定义。
  • 完全旋转360度后,矩形是否会与三角形相交/触摸?
  • 如果是这样,交叉首次出现的旋转角度是多少?这个第一个十字路口的重点是什么?

在考虑了一段时间后,似乎有3个主要案例:

  • 三角形顶点接触矩形表面
  • 三角形表面接触矩形顶点
  • 三角形边缘触及矩形边

有两种不太可能的情况,两者在交叉时是垂直的:

  • 矩形边缘击中三角形表面
  • 矩形表面点击三角形边缘

然而,确定这些案例并没有让我更接近解决方案。我希望有人能指出我如何解决这个问题的正确方向。我想快速解决少数矩形x和大量三角形。

上下文:我想要解决的更大问题是我想在一个封闭的多边形网格周围包裹一个矩形。我希望一步一步地旋转矩形直到它相交,然后围绕交叉点旋转剩余的矩形等。

1 个答案:

答案 0 :(得分:1)

围绕其中一侧旋转矩形时,会得到一个圆柱体。将每条线与圆柱相交。交点的位置为您提供旋转角度。由于这并没有抓住三角形完全包含在圆柱体内的情况,因此测试顶点是否正确。到圆柱体轴的距离也小于圆柱体的半径。

假设您的矩形具有AD的顶点。您想围绕AB边旋转。然后圆柱的半径为r = |AD|

首先,transform the coordinates以便矩形放置在您沿着z轴和x轴的相邻边旋转的一侧。

A′ = {M} · A = {0, 0, 0}
B′ = {M} · B = {0, 0, |AB|}
C′ = {M} · C = {r, 0, 0}

将相同的变换{M}应用于三角形的顶点。

现在找到三角形的三个边与圆柱的交点。因为圆柱体与z轴对齐,所以问题可以分为两个子问题:(1)找到顶部和底部曲面的任何交点z == 0z == |AB|。 (2)找到"外套的交叉点"气缸;这是一条线与xy平面中的圆的交点。

然后,您可以使用这些点的yx坐标的正切函数计算旋转角度为atan2(y, x)

如果您需要原始坐标中交叉点的坐标,请不要忘记撤消转换。