首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面向特定点创建三角形

面向特定点创建三角形
EN

Stack Overflow用户
提问于 2014-02-27 18:23:12
回答 2查看 865关注 0票数 1

我有一种画三角形的方法:

代码语言:javascript
复制
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参数中的计算值可以将三角形设置为正确的方向,但我并不是最好的数学专家,所以我不知道这样的函数可能需要包含什么计算。

我对挥杆也很陌生,所以我不知道我画这些三角形并将它们移向某一点的方法是否是一个好方法,所以如果有人有任何建议,我会全神贯注!

如果能在这方面提供任何帮助,我将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 18:38:00

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

票数 1
EN

Stack Overflow用户

发布于 2014-02-27 19:02:22

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

要创建您的AT,请拨打:

代码语言:javascript
复制
AffineTransform.getRotateInstance(double vecx, double vecy, double anchorx, double anchory)

其中锚是你的旋转中心(你的xy),维克斯维迪是你的旋转矢量。在您的例子中,旋转向量是targetx\targety。旋转矢量是一个向量,如果你旋转初始的x轴,它将位于旋转的结果上。当三角形的顶部位于x轴上时,我们可以不用进一步计算就可以使用它。

然后,你可以转换你的观点:

代码语言:javascript
复制
Point2D p1 = new Point2D(x - 4, y - 4);
Point2D rotatedP1 = new Point2D(0, 0);
at.transform(p1, rotatedP1);

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

希望能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22077089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档