我试图让节点指向另一个节点的点,具体取决于第一个节点的方向。问题是,考虑到X和Y的位置以及宽度和高度,我无法考虑节点调用的方式来判断它是左,右,北还是南。 以下是问题的图片:
我尝试比较X和Y值,例如if(child.Y> parent.Y) - >捕捉到南点,但它太模糊,如果向右或向左放置,将向北或向南捕捉。我可以用更具体的条件来获得正确的方向吗?谢谢
答案 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;
}
虽然两个锚点对有可能具有相同的距离,但在这种情况下这应该无关紧要,因为其中任何一个都同样有效。