提问人:Abdo21 提问时间:2/20/2023 最后编辑:Abdo21 更新时间:2/20/2023 访问量:65
如何计算连接两个电路元件的角点?
How can I compute the corner point for connecting two circuit components?
问:
我有一个源组件和一个目标组件,我想计算它们将连接的角点。我正在实现一种方法,该方法将源点和目标点及其方向(水平或垂直)作为输入。以下是该方法的骨架:
private final static int HORIZONTAL = 0;
private final static int VERTICAL = 1;
private PointF computeCornerPoint(PointF sourcePoint, int sourceComponentOrientation, PointF targetPoint, int targetComponentOrientation) {
PointF cornerPoint = new PointF();
// TODO: Calculate the corner point here
return cornerPoint;
}
我创建了一个图表,显示了所有可能的情况。在图中,绿点是源点和目标点,红点是我要计算的角点。
另外,请注意,这个问题是对称的,因此源组件和目标组件可以交换,我提供的图表只显示了一种情况。
在 Android 中,x 坐标从左到右递增,y 坐标从上到下递增。
您能提出一种算法或解决方案来计算所有这些情况的角点吗?
此外,如果缺少任何有助于解决此问题的信息,请告诉我。
答:
水平/垂直是不够的——我们需要知道 连接点所在的组件。另外,我不确定你想怎么做 处理相对两侧的连接点。
对于您展示的情况,答案将是(source.x, target.y) 或 (target.x, source.y)。如果(例如)源点是 在其组件的右侧,则 (target.x, source.y) 被否决 如果 target.x < source.x,则首选 source.x < target.x;(来源.x, target.y) 是一个中等选项。其他7例(3个来源 方向和四个目标方向)是对称的。我们要求 未被否决的选项,如果满足以下条件,应选择首选选项 可能。
假设 (source.dx, source.dy) 和 (target.dx, target.dy) 给出 它们各自连接点相对于 组件的中心(因此使用通常的数学坐标 正 dx 指向右且正 dy 指向上方的系统,(dx, dy) = (1, 0) 是正确的,(dx, dy) = (0, 1) 是向上的,依此类推)。泛型 分量的条件是,点 (x′, y′) 是 否决/首选/中等 if component.dx * (x′ - component.x) + component.dy * (y′ - component.y) 小于/大于/等于 分别为零。如果我们让“否决”是 -2 分,最好是 1 分 点,中等为 0 分,我们可以将两者的分数相加 候选人得分并取最大值。
评论