【问题标题】:Adjusting Coordinates Given Angle / Window Size in JFrame在 JFrame 中调整给定角度/窗口大小的坐标
【发布时间】:2017-03-21 23:30:21
【问题描述】:

所以这可能是一个相当简单的问题,但是我已经编写了超过 8 个小时的代码,所以我的大脑有点大便。基本上,我有一个看起来像这样的框架:(http://imgur.com/a/DFSI5)

请原谅我的粗略绘图,我想知道数学。给定角度 theta,我想要做的是,给定一个特定的 Point 对象,这将是我射击的子弹,我如何平行调整 x/y 坐标以沿给定角度移动? JFrame 内部有一个大小为 700x500 的窗口。如果非常有必要,我会将代码发布在 pastebin 中,但我觉得这个问题纯粹是算术(sin/cos/tan)相关的。

基本上我有这个:

        if(pinballAngle > 90){
            pinballCoordinate.x+=(pinballAngle/3);
            pinballCoordinate.y-=20;
        }
        else if(pinballAngle < 90){
            pinballCoordinate.x+=(pinballAngle/3);
            pinballCoordinate.y-=20;
        }
        else{
            pinballCoordinate.y-=20;
        }

所以 pinballCoordinate 是我试图在给定 theta 角度的情况下调整的 Point 对象,即发射弹球的“枪”。 “pinballAngle”变量是枪的角度。

【问题讨论】:

  • 那么您是在问如何在 Java 中计算正弦和余弦?
  • 因此,问题可以归结为线性路径跟踪问题。也就是说,你有一个起点,你有一个角度,你想沿着远离起点的路径走。在这里,我将回到计算圆上的一个点来生成我的目标点,然后我只需要在这些点之间走一条直线:P - 这可能有点令人费解,但我会回到我知道如何去做的事情上遇到此类问题时解决;)
  • 参见引用的示例here

标签: java swing trigonometry graphics2d


【解决方案1】:

首先,您需要以弧度表示的角度

int speed = 20; // the speed of the bullet

double rad = pinballAngle * 2 * Math.PI / 360;
pinballCoordinate.x += (int) ( Math.cos(rad)*speed );
pinballCoordinate.y += (int) ( Math.sin(rad)*speed );

您可能需要在 x 或 y 中使用相反的值,在需要的地方替换为 -=

数学文档: https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html

【讨论】:

  • -= 不需要,因为正弦和余弦已经产生了正确的正/负值。
  • 对于y,您可能需要-=,但对于x,您可能需要+=
  • @DavidWallace 在他们正在纠正大多数布局/绘图实用程序使用的倒置 y 轴的情况下是正确的。在这些情况下,几何图形只是垂直翻转,从而以相反的方向表示旋转。
  • @GameGibu 是的,也要看OP源代码中pinballAngle是什么意思,也就是0°是左还是右(图中是左方向,所以-=对于 x)
  • 在三角形的所有参数(边)未知的情况下,如何确定垂直(y)或水平(x)距离?
猜你喜欢
  • 2016-06-02
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多