- 这个问题是在 3D 空间中。
- 有一个矩形,由 4 个顶点定义。我们围绕它的一侧旋转它。
- 有一个三角形,由 3 个顶点定义。
- 旋转 360 度后,矩形是否会与三角形相交/接触?
- 如果是这样,第一次相交时的旋转角度是多少?第一个交叉点的意义何在?
经过一段时间的思考,似乎有 3 种主要情况:
- 三角形顶点与矩形面相交
- 三角形面与矩形顶点相交
- 三角形边与矩形边相交
并且有两种不太可能的情况是两者相交时垂直:
- 矩形边与三角形面相交
- 矩形面与三角形边相交
然而,识别这些案例并没有真正让我更接近解决方案。我希望有人能为我指出正确的方向来解决这个问题。我想快速解决少量矩形 x 大量三角形的问题。
上下文:我要解决的更大问题是我想在封闭的多边形网格周围包裹一个矩形。我希望通过旋转矩形直到它相交,然后围绕交点旋转剩余的矩形等来逐步执行此操作。
最佳答案
当您围绕其中一个边旋转一个矩形时,您会得到一个圆柱体。将每条线与圆柱相交。交点的位置为您提供了旋转角度。由于这没有捕捉到三角形完全包含在圆柱体中的情况,因此测试顶点到圆柱体轴的距离是否也小于圆柱体的半径。
假设你的矩形有顶点 A
到 D
。你想绕 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) 找到与顶面和底面 a z == 0
的任何交点和 z == |AB|
。 (2) 找到与圆柱体“外衣”的交点;这是一条线与圆在 xy
平面上的交点。
然后,您可以使用这些点的 y
和 x
坐标的正切函数计算旋转角度,如 atan2(y, x)
.
如果需要原始坐标中交点的坐标,别忘了撤销变换。
关于python - 旋转矩形直到碰到三角形,并确定交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33665331/