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

Rotate a rectangle until it hits a triangle, and determine the point of intersection

想了想,主要有3种情况:

并且有两种不太可能的情况是两者相交时垂直:

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

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

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

假设你的矩形有顶点 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) 找到与顶面和底面 a z == 0z == |AB| 的任何交点。 (2) 求与圆柱体"coat"的交点;这是 xy 平面中直线与圆的交点。

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

如果需要原始坐标中的交点坐标,别忘了撤销变换。