【问题标题】:Segment direction in a polar plane极平面中的分段方向
【发布时间】:2015-09-18 18:42:26
【问题描述】:

我有以下情况:基点(绿色)和线段,对于每个线段,他的顶点表示为极点,与基点成θ角。

问题:对于每个段,我都有他的 2 个顶点 theta。未订!我只需要从这些数据中找出这段重叠的角度范围。例如,对于属于顶部段的 2 个顶点 {20,300},正确答案是从 300 到 20 的所有角度,而不是从 20 到 300 的所有角度。

方向是从 0 到 359,如示例所示,它是循环的。

编辑:假设 - Segment 的最大重叠角度小于 180,即 179。

我认为解决方案就是为if找到“合适的条件”...

class Node {
    int theta;  //angle from base point e.g. 45
    double radius;  //distance (in problem specific metric) from base point
}

class Segment {
    //nodes not ordered in any way
    Node node_1;
    Node node_2;
}

List<Segments> allSegments = new ArrayList<>();
//populate allSegments...

Segment mSegment;
for (int i=0; i<allSegments.size(); i++) {
    mSegment = allSegments.get(i);
    if (TODO? mSegment.node_1.tetha ? mSegment.node_2.theta) {
       //the order is from node_1 to node_2 or otherwise...
    }
}

谢谢,

【问题讨论】:

    标签: algorithm geometry computational-geometry euclidean-distance polar-coordinates


    【解决方案1】:

    让我们抛开线段通过原点的情况。我们稍后会考虑。

    角度将定义两条弧线:一条小于 180 度,另一条大于 180 度。您的圆弧将始终是小于 180 度的圆弧。为什么?考虑 x 轴垂直位移非常小的量。范围将是 90 度到 270 度,大致,给予或少量。只要您保持在 x 轴的同一侧,两个角都不会超过直角,因此总和将小于 2 x 90 度。

    给定任意两个角 x 和 y,其中 x 和 y 在 [0, 360)(半开区间),我们可以 w.l.o.g.假设 x >= y。那么范围是 (x - y) 和 (y - x + 360)。计算两者并取两者中较小的一个。在您的示例中:(300 - 20) = 280 和 (20 - 300 + 360) = 80,所以 80 是答案(或者 300-20,如果您更喜欢范围格式)。再次:计算 (x - y) 和 (y - x + 360),如果 (x - y) 更小,您的范围将是“y 到 x”,如果 (y - x + 360) 则为“x 到 y”更小。

    现在考虑 x = y + 180 的情况。那么你的算法应该回答什么?这不是一个修辞问题 - 这是用户的问题。

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 2012-09-08
      • 2023-03-28
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      相关资源
      最近更新 更多