java - 创建面向某一点的三角形

时间:2014-02-27 18:23:12

标签: java swing

我有这种绘制三角形的方法:

public void draw(Graphics g, int targetX, int targetY){

    /*CODE TO ADJUST X AND Y*/

    g.setColor(Color.white);
    g.fillPolygon(new int[]{x - 4, x - 4, x + 9}, new int[]{y - 4, y + 4, y}, 3);
}

x和y是反映三角形中心点的实例变量,三角形是围绕此点绘制的。它是一个等腰三角形,因此它“指向”某物。使用我在那里使用的参数,它直接指向右边。

targetX和targetY是三角形朝向的点。每次重绘时,x和y都会递增或递减,以将它们移向目标。

所以我想做的是绘制三角形,使其指向目标坐标。通过我现在的方法,我想我需要编写一个函数来填充'x - 4''x - 9'等等... fillPolygon参数中的计算,其中的值将三角形设置为正确的方向但我并不是最好的数学家,因此我不知道这样的函数可能需要包含哪些计算。

我对Swing也很陌生,所以我不知道我绘制这些三角形并将它们移向某一点的方法是否是一个好的方法,所以如果有人有任何建议那么我就全都耳朵了!

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

您可以使用java Math包的trig函数从三角形的中心和目标点获取角度,并使用它来根据所需的宽度和高度计算三角形的三个点。 如果您不了解基本的三角函数,这可能会很难。

答案 1 :(得分:1)

正如我在评论中指出的那样,AffineTransform(http://docs.oracle.com/javase/7/docs/api/java/awt/geom/AffineTransform.html)就是您需要的一切。

要创建您的AT,请致电:

AffineTransform.getRotateInstance(double vecx, double vecy, double anchorx, double anchory)

其中锚是您的旋转中心(您的xy),而vecx | vecy是您的旋转向量。在您的情况下,旋转向量为targetx | targety。旋转矢量是矢量,如果旋转初始x轴,它将位于旋转结果上。当三角形的顶部位于x轴上时,我们可以使用它而无需进一步计算。

然后,你可以改变你的观点:

Point2D p1 = new Point2D(x - 4, y - 4);
Point2D rotatedP1 = new Point2D(0, 0);
at.transform(p1, rotatedP1);

这将返回旋转点。继续你的另外两点。三角形现在应指向您定义的目标。如果将点存储在数组中,则可以使用一个方法调用来旋转它们:See here.

希望它有所帮助。