【问题标题】:java draw line on intersection point of two linesjava在两条线的交点上画线
【发布时间】:2017-10-04 11:45:37
【问题描述】:

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

我像这样计算两条线之间的角度:

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 是交点。然而,这条线总是以错误的角度结束,我怎样才能重写这段代码,使这条线准确地绘制在另外两条线之间,就像上面的示例图片一样?

编辑:

输出:

【问题讨论】:

  • 您能否向我们展示您的方法的视觉输出?
  • @Maia 添加了输出
  • 两条线上的第一个点是哪一点?你希望线路去哪里?也许添加其他颜色。

标签: java math


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    要求两条直线所成角的平分线,需要计算这些直线的单位方向向量。

    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
    

    平分线的第二点是

    point.x = pI.x + 100.0 * bx 
    point.y = pI.y + 100.0 * by 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多