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

标签 python algorithm 3d geometry computational-geometry

  • 这个问题是在 3D 空间中。
  • 有一个矩形,由 4 个顶点定义。我们围绕它的一侧旋转它。
  • 有一个三角形,由 3 个顶点定义。
  • 旋转 360 度后,矩形是否会与三角形相交/接触?
  • 如果是这样,第一次相交时的旋转角度是多少?第一个交叉点的意义何在?

经过一段时间的思考,似乎有 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 == 0 的任何交点和 z == |AB|。 (2) 找到与圆柱体“外衣”的交点;这是一条线与圆在 xy 平面上的交点。

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

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

关于python - 旋转矩形直到碰到三角形,并确定交点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33665331/

相关文章:

math - 没有引用平面的两个向量之间的有符号角

3d - 结合 Three.js 和 KineticJS - 3D 立方体

python - 同时使用 Matplotlib Slider 和 key_release_event

algorithm - 最大流图算法

python - pandas 多索引排序特定字段

algorithm - 为一组 3D 矩形项目找到最佳 3D 框尺寸

c - Toom-Cook乘法算法实现

javascript - 在直线上移动网格 三个 JS

python - 了解条件逻辑

python - 树数据结构中的根节点操作