如何围绕点旋转多边形

时间:2013-10-10 18:41:03

标签: java graphics rotation polygon

我正在使用Java的Graphics2D库来绘制各种形状,并将线条连接在一起。其中一些线路在线路末端需要一个箭头。形状可以处于任何位置,因此箭头的角度会发生变化。

到目前为止,我的代码绘制箭头并旋转它,除非它不是直角或正确的位置。当我在屏幕上移动我的形状时,箭头会出现在它想要指向的形状的轨道上。 (coord x2,y2)

private static void drawArrow(Graphics2D g, int size, int x1, int y1, int x2, int y2) {
    double dx = x2 - x1, dy = y2 - y1;
    double theta = Math.atan2(dy, dx);
    AffineTransform at = AffineTransform.getTranslateInstance(x2, y2);
    Polygon p = new Polygon();
    p.addPoint(0, 0);
    p.addPoint(size, 0 - size);
    p.addPoint(0 - size, 0 - size);
    at.rotate(theta, x2, y2);
    java.awt.Shape shape = at.createTransformedShape(p);
    g.fill(shape);
}

int size - 箭头的大小除以2.

int x1,y1 - 首先形成x和y坐标。 (形状中心)

int y2,x2 - 第二个形状x和y coords。 (形状中心)

你可以在这些图片中看到我的意思: Example 1

Example 2

我有一种感觉我接近这个,因为它似乎完美地围绕着形状,这表明它不是以正确的角度或点旋转。

2 个答案:

答案 0 :(得分:1)

首先你需要获得该线的角度,所以首先注意线的起点(接触顶盒的那个)作为原点。 可以使用以下公式找到角度:tan(theta)=(y / x) 你是多少下来,x是你向左走多少(从原点开始,左/下是你的轴方向,默认情况下通常是java输出)

theta = Math.atan(x/y);

然后你将旋转角应用到你的三角形,偏移量为正确的方向:

at.rotate(theta + offset);

您可以通过反复试验获得偏移量。 请记住cos / sin / tan使用弧度

Math.toRadians(double angleInDegrees)
Math.toDegrees(double angleInRadians)

你也应该阅读如何在AffineTransform @ docs

的java文档上使用方法 <。> .rotate(双角,双x,双y)用于绕(x,y)点旋转
请改用.rotate(双角度)。 然后只需将三角形转换回新点

答案 1 :(得分:-1)

使用原点(0,0)进行旋转

您有两种方式:

1.-计算形状原点的旋转。

2.-将形状移动到(0,0)旋转,然后返回当前位置。

我现在没有代码,但很容易:)我已经做到了。

相关问题