如何比较从一个节点到另一个节点的方向

时间:2016-05-08 06:01:05

标签: javafx orientation

我试图让节点指向另一个节点的点,具体取决于第一个节点的方向。问题是,考虑到X和Y的位置以及宽度和高度,我无法考虑节点调用的方式来判断它是左,右,北还是南。 以下是问题的图片:enter image description here

我尝试比较X和Y值,例如if(child.Y> parent.Y) - >捕捉到南点,但它太模糊,如果向右或向左放置,将向北或向南捕捉。我可以用更具体的条件来获得正确的方向吗?谢谢

1 个答案:

答案 0 :(得分:0)

你可以通过在你的盒子上定义锚点来做到这一点:

public class UMLClassBox {
  private Point2D north;
  private Point2D east;
  private Point2D south;
  private Point2D west;
  public List<Point> getAnchorPoints() {
    ...
  }
}

作为第二步,您可以使用方法找到最接近的两个节点:

public Point2D[] findClosestNodes(UMLClassBox box1, UMLClassBox box2) {
  Point2D[] closest = new Point2D[2];
  double shortestDistance = Double.MAX_VALUE;
  for (Point2D anchorBox1 : box1.getAnchorPoints()) {
    for (Point2D anchorBox2 : box2.getAnchorPoints()) {
      double distance = anchorBox1.distance(anchorBox2);
      if (distance < shortestDistance) {
        shortestDistance = distance;
        closest[0] = anchorBox1;
        closest[1] = anchorBox2;
      }
    }
  }
  return closest;
}

虽然两个锚点对有可能具有相同的距离,但在这种情况下这应该无关紧要,因为其中任何一个都同样有效。