旋转矩形直到碰到三角形,并确定交点
Rotate a rectangle until it hits a triangle, and determine the point of intersection
- 此问题在 3D 中 space。
- 有一个矩形,由 4 个顶点定义。我们围绕它的一侧旋转它。
- 有一个三角形,由 3 个顶点定义。
- 旋转 360 度后,矩形会 intersect/touch 变成三角形吗?
- 如果是,第一次相交的旋转角度是多少?第一个交叉点的意义是什么?
想了想,主要有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) 求与圆柱体"coat"的交点;这是 xy
平面中直线与圆的交点。
然后可以用这些点的y
和x
坐标的正切函数计算旋转角度为atan2(y, x)
.
如果需要原始坐标中的交点坐标,别忘了撤销变换。
- 此问题在 3D 中 space。
- 有一个矩形,由 4 个顶点定义。我们围绕它的一侧旋转它。
- 有一个三角形,由 3 个顶点定义。
- 旋转 360 度后,矩形会 intersect/touch 变成三角形吗?
- 如果是,第一次相交的旋转角度是多少?第一个交叉点的意义是什么?
想了想,主要有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) 求与圆柱体"coat"的交点;这是 xy
平面中直线与圆的交点。
然后可以用这些点的y
和x
坐标的正切函数计算旋转角度为atan2(y, x)
.
如果需要原始坐标中的交点坐标,别忘了撤销变换。