画布通过锚点将矩形与矩形连接起来

时间:2018-06-20 11:19:09

标签: javascript canvas

我创建了一个要绘画的画布。我画了一些矩形对象

class Rectangle extends Shape{
    constructor(posTopLeft, width, height){
    const halfWidth = width * 0.5;
    const halfHeight = height * 0.5;

    super(width, height, new Position(posTopLeft.x + halfWidth, posTopLeft.y + halfHeight)); // set width, height and center position

    this.centerLeftPosition = new Position(this.centerPosition.x - halfWidth, this.centerPosition.y);
    this.centerRightPosition = new Position(this.centerLeftPosition.x + width, this.centerLeftPosition.y);
    this.centerTopPosition = new Position(this.centerPosition.x, this.centerPosition.y - halfHeight);
    this.centerBottomPosition = new Position(this.centerPosition.x, this.centerTopPosition.y + height);

    this.topLeftPosition = posTopLeft;
    this.bottomLeftPosition = new Position(this.topLeftPosition.x, this.topLeftPosition.y + height);
    this.topRightPosition = new Position(this.topLeftPosition.x + width, this.topLeftPosition.y);
    this.bottomRightPosition = new Position(this.topRightPosition.x, this.bottomLeftPosition.y);
  }
}

rect

我还想从一个矩形到另一个矩形画一条线。

class Lane{
    constructor(startRect, targetRect){
       this.startRect = startRect;
       this.targetRect = targetRect;
  }
}

如果车道试图计算最短路径,如何通过车道连接这两个矩形?

表示一个支路正好位于另一个支路的上方,则车道将从第一个支路的中心底部到第二个支路的中心顶部。

如果第一个rect在左侧,第二个在右侧,则车道将从另一个rect的右中到左中。

1 个答案:

答案 0 :(得分:1)

只需计算一个矩形的每个点到另一个矩形的每个点的距离,然后对列表进行排序并取最短的一个

例如,您将有两个列表,一个矩形用于所有点-现在您遍历第一个列表,并为每个点计算到另一个矩形所有点的距离

rectangle1[].foreach(function(point) {
distances.push(getDistance(point, point));
});

然后您只需distances.sort()就可以得到最短的

要知道是哪一个,您可以将对象保存在包含其他点的坐标或名称的距离中,也可以制作一本字典,在其中保存与名称对应的距离-对于后面的对象,您只需处理多个点的距离分别相等的情况,而对于第一个点,您可能不能仅排序{42, {pointA: [32,12], pointB: [42, 64]}}之类的东西,因此您将必须编写一个收集距离的函子,然后这样做

最后都是一样的,希望我能帮忙,欢呼