在考虑了一段时间后,似乎有3个主要案例:
有两种不太可能的情况,两者在交叉时是垂直的:
然而,确定这些案例并没有让我更接近解决方案。我希望有人能指出我如何解决这个问题的正确方向。我想快速解决少数矩形x和大量三角形。
上下文:我想要解决的更大问题是我想在一个封闭的多边形网格周围包裹一个矩形。我希望一步一步地旋转矩形直到它相交,然后围绕交叉点旋转剩余的矩形等。
答案 0 :(得分:1)
围绕其中一侧旋转矩形时,会得到一个圆柱体。将每条线与圆柱相交。交点的位置为您提供旋转角度。由于这并没有抓住三角形完全包含在圆柱体内的情况,因此测试顶点是否正确。到圆柱体轴的距离也小于圆柱体的半径。
假设您的矩形具有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)找到顶部和底部曲面的任何交点z == 0
和z == |AB|
。 (2)找到"外套的交叉点"气缸;这是一条线与xy
平面中的圆的交点。
然后,您可以使用这些点的y
和x
坐标的正切函数计算旋转角度为atan2(y, x)
。
如果您需要原始坐标中交叉点的坐标,请不要忘记撤消转换。