Java - 计算和放置几何形状的角度

时间:2015-05-06 10:25:51

标签: java swing graphics geometry jpanel

我目前正致力于一个程序,使用户可以绘制各种几何形状。但是,我在计算角度对象并将其准确放置到Canvas面板上时遇到了一些问题。角度对象基本上是Arc2D对象的扩展,它提供了一个名为computeStartAndExtent()的附加方法。在我的Angle类中,此方法计算并找到必要的起始和扩展角度值:

private void computeStartAndExtent()
    {
        double ang1 = Math.toDegrees(Math.atan2(b1.getY2() - b1.getY1(), b1.getX2() - b1.getX1()));
        double ang2 = Math.toDegrees(Math.atan2(b2.getY2() - b2.getY1(), b2.getX2() - b2.getX1()));

        if(ang2 < ang1)
        {
            start = Math.abs(180 - ang2);
            extent = ang1 - ang2;
        }
        else
        {
            start = Math.abs(180 - ang1);
            extent = ang2 - ang1;
        }
        start -= extent;
    }

这是一个有点错误的代码,只有在我将两条线相互连接时才有效,但是,当我连接第三条线来制作三角形时,结果如下所示,

enter image description here

如您所见,ADB角度是唯一正确放置的角度。我无法想象如何克服这个问题。如果您需要一些额外的信息/代码,请告诉我。

编辑: b1和b2是computeStartAndExtent()方法中的Line2D对象。

谢谢。

1 个答案:

答案 0 :(得分:1)

可以做一些简化计算的事情:

  • 保持顶点有序,以便始终清楚如何计算远离角落的顶角
  • 此外,始终将多边形绘制到同一方向;那么你总是可以将角度绘制到同一个方向。下面的示例假定多边形是顺时针绘制的。给定逆时针绘制的多边形,相同的角度计算将导致在外部绘制弧。

示例代码;与你的不完全相同,因为我没有你的代码,但具有类似的功能:

:Dr REPLACEVALUE

结果:

Screenshot of a polygon