Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-创建面向特定点的三角形_Java_Swing - Fatal编程技术网

java-创建面向特定点的三角形

java-创建面向特定点的三角形,java,swing,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是反映三角形中心点的实例变量,三角形围绕该点绘制。它是一个等

我用这个方法画一个三角形:

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也很陌生,所以我不知道我画这些三角形并将它们移向某个点的方法是否是一种好方法,所以如果有人有任何建议,我会洗耳恭听


如果有任何帮助,我们将不胜感激。

您可以使用java Math软件包的trig函数获取三角形中心与目标点之间的角度,并使用该角度根据所需的宽度和高度计算三角形的三个点。
如果你不懂基本的三角学,这可能会很困难。

正如我在评论中指出的,仿射变换()就是你所需要的一切

要创建AT,请致电:

AffineTransform.getRotateInstance(double vecx, double vecy, double anchorx, double anchory)
其中锚点是你的旋转中心(你的
x
y
),vecx|vecy是你的旋转向量。在您的例子中,旋转向量是
targetx
|
targety
。旋转向量是一个向量,如果旋转初始x轴,它将位于旋转的结果上。由于三角形的顶部位于x轴上,我们可以使用它而无需进一步计算

然后,可以变换点:

Point2D p1 = new Point2D(x - 4, y - 4);
Point2D rotatedP1 = new Point2D(0, 0);
at.transform(p1, rotatedP1);
这将返回旋转的点。继续你的另外两点。三角形现在应该指向您定义的目标。如果将点存储在数组中,则可以通过一个方法调用旋转它们:


希望有帮助。

听起来更像是math.stackexchange.com的一个问题,而不是Java问题。也许,但也许现有的Java函数可以帮助实现这一点?就像我说的,我不完全确定我的方法是否是一个好的开始。我不认为这是一个纯粹的数学问题。有一个很好的类提供仿射变换()。如果您将AT定义为具有所需角度的旋转(使用sin/cos计算),这应该可以正常工作。