我有一种画三角形的方法:
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和y都会增加或减少,以将它们移向目标。
所以我要做的是画三角形,这样它就指向目标坐标。按照我现在的方法,我想我需要编写一个函数来填充“x-4”‘x-9’,等等.fillPolygon参数中的计算值可以将三角形设置为正确的方向,但我并不是最好的数学专家,所以我不知道这样的函数可能需要包含什么计算。
我对挥杆也很陌生,所以我不知道我画这些三角形并将它们移向某一点的方法是否是一个好方法,所以如果有人有任何建议,我会全神贯注!
如果能在这方面提供任何帮助,我将不胜感激。
发布于 2014-02-27 18:38:00
您可以使用java Math包的trig函数从三角形的中心和目标点获取角度,并根据所需的宽度和高度计算三角形的三个点。不过,如果你不懂基本的三角学,这可能会很困难。
发布于 2014-02-27 19:02:22
正如我在注释中所指出的,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)其中锚是你的旋转中心(你的x和y),维克斯维迪是你的旋转矢量。在您的例子中,旋转向量是targetx\targety。旋转矢量是一个向量,如果你旋转初始的x轴,它将位于旋转的结果上。当三角形的顶部位于x轴上时,我们可以不用进一步计算就可以使用它。
然后,你可以转换你的观点:
Point2D p1 = new Point2D(x - 4, y - 4);
Point2D rotatedP1 = new Point2D(0, 0);
at.transform(p1, rotatedP1);这将返回旋转点。继续你的另外两点。三角形现在应该指向您定义的目标。如果将点存储在数组中,则可以使用一个方法调用旋转它们:看这里。
希望能帮上忙。
https://stackoverflow.com/questions/22077089
复制相似问题