【问题标题】:Rotate a rectangle until it hits a triangle, and determine the point of intersection旋转一个矩形直到它碰到一个三角形,然后确定交点
【发布时间】:2016-02-13 09:59:56
【问题描述】:
  • 此问题在 3D 空间中。
  • 有一个矩形,由 4 个顶点定义。我们围绕它的一侧旋转它。
  • 有一个三角形,由 3 个顶点定义。
  • 完整 360 度旋转后,矩形是否会与三角形相交/接触?
  • 如果是这样,首先出现交叉点的旋转角度是多少?第一个路口的意义何在?

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

  • 三角形顶点接触矩形表面
  • 三角形表面接触矩形顶点
  • 三角形边接触矩形边

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

  • 矩形边缘撞击三角形表面
  • 矩形表面碰到三角形边缘

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

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

【问题讨论】:

  • 欢迎来到 SO,我们不为人们做任何功课,只要他们遇到困难就帮助他们。发布您的代码,让我们看看您尝试做什么,以便我们更好地为您指出解决方案
  • @svarog 嘿,这不是作业,如果看起来是这样,对不起):我整天都在考虑这个问题,但没有任何进展,这就是我在这里发帖的原因。我还没有任何代码,因为我还没有想到任何尝试的方法。我也不是真的在找代码,我主要是在找人来指导我完成这项任务或类似任务的算法。

标签: python algorithm 3d geometry computational-geometry


【解决方案1】:

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

假设您的矩形有顶点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)找到与圆柱“外套”的交点;这是xy 平面中线与圆的交点。

然后您可以将这些点的yx 坐标的正切函数计算为atan2(y, x)

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多