java绘制线在两条线的交点上

时间:2017-10-04 11:45:38

标签: java math

我有一个程序,我可以绘制两条线,当我选择这些线的起点和终点时,它会计算它们相交的点。我想从交叉点开始画一条线,正好在这两条线的中间。

example

我正在计算两条线之间的角度,如下所示:

double angle(Line pL1, Line pL2){
    double angle = Math.toDegrees(Math.atan2(pL2.p1.y - pL1.p1.y, pL2.p1.x - pL1.p1.x));
    if(angle < 0){
        angle += 360;
    }
    return angle;
}

然后像这样生成新行:

    double newAngle = Math.toRadians(drawAngle);
    System.out.println(newAngle);
    double x = pI.x + 80 * Math.sin(newAngle);
    double y = pI.y + 80 * Math.cos(newAngle);
    Point2D.Double endPoint = new Point2D.Double(x,y);
    Line l3 = new Line(pI,endPoint);

其中pI是交叉点。但是,该行总是面向错误的角度,我如何重写这段代码,以便在两条其他线之间精确绘制线条,如上面的示例图片?

编辑:

输出:example2

2 个答案:

答案 0 :(得分:0)

我不知道你在角度方面做了什么,但我认为你想要的第二点是:

double y = 0.5*(pL2.p1.y + pL1.p1.y);
double x = 0.5*(pL2.p1.x + pL1.p1.x);

您计算的角度是每条线的第一个点所绘制的线的角度。这似乎不相关。

答案 1 :(得分:0)

要找到由两条线形成的角度的平分线,您需要计算这些线的单位方向向量。

igm

和平分线的第二点是

len1 = Sqrt((pL1.p1.y - pL1.p2.y)^2 + (pL1.p1.x - pL1.p2.x)^2)
dx1 = (pL1.p2.x - pL1.p1.x) / len1
dy1 = (pL1.p2.y - pL1.p1.y) / len1
similar for the second line

bx = (dx1 + dx2) / 2
by = (dy1 + dy2) / 2