当前位置: 首页 > 面试题库 >

在Java中以特定角度画一条线

万涵亮
2023-03-14
问题内容

假设我有一个(x,y)对于一条线的起点始终是相同的,并且(x,y)对于同一条线的终点是变化的。该行也总是40px长。在程序开始时,该线以垂直方向开始(称为0度)。根据用户输入,我需要通过仅更改端点(x,y)从其原点开始重画特定角度的线条。

如果需要,可以考虑使用更多食物:

我很想计算这个并使它在Java中工作。我可以使数学基于圆弧段的弧长来计算点,但是我不知道如何使Java做到这一点。

我认为,根据三角形的角度,它会更容易工作,因为我将永远知道三角形的两侧的长度(一侧由40px长线形成,另一侧由该线的起点和边界形成)
JPanel)和那两条线形成的角度。尽管如此,我的大脑仍在试图弄清楚。任何帮助将非常感激。

更新:

@casablanca让我步入正轨。我重新研究了触发功能,这就是使它工作的方式。

首先,我没有意识到90度是笔直的,但是一旦我意识到使解决方案能够反映这一事实。我从画框的底部中央开始画线。因为opposite当我的用户给定的角度小于90度时,三角形的边在屏幕的右侧,而当我的用户给定的角度大于90度时,三角形的边在屏幕的左侧,所以我必须调整公式以解决这一问题,因此我有四种方法,一种用于x屏幕左侧的坐标(当用户给定的角度大于90度时),一种用于y坐标在屏幕左侧(当用户给定角度大于90度时)和屏幕右侧在用户给定角度小于90度时相同。在int length所有方法是斜边的长度。 再次感谢您的帮助@casablanca!

public double leftSideX(double angle, int length){
    double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return x;
}

public double leftSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
    return y;
}

public double rightSideX(double angle, int length){
    double x = frameWidth/2 + (length * Math.cos(angle));
    return x;
}

public double rightSideY(double angle, int length){
    double y = frameHeight - (length * Math.sin(angle));
    return y;
}

问题答案:

这是您要找的东西吗?

startX = x;
startY = y;
endX   = x + 40 * Math.sin(angle);
endY   = y + 40 * Math.cos(angle);

并在所使用的任何API中从(startX,startY)到(endX,endY)画一条线。

另请注意,angle以弧度为单位。如果以度为单位,则需要先进行转换:

angle = angle * Math.PI / 180;


 类似资料:
  • 我试图创建一个游戏,在其中我可以旋转矩形,并将其向前或向后移动,当我按下右键时,它会顺时针旋转,如果我按下左键,它会逆时针旋转,但我有一个问题,如果我向上或向下移动,它只会在我按下右键和左键时旋转相同,但我预期它们会向上或向下移动,我已经看过其他的程序,并试图复制他们的方法,但我仍然错过了一些东西,有人请帮助,提前感谢 下面是我的确切代码: }

  • 问题内容: 因此,我有一个应用程序可以根据按下键盘上的哪个按钮成功地向左,向右,向上或向下移动球(椭圆)。但是,我无法使球倾斜移动。我试图通过说如果用户按住2个方向键,则球将沿对角线进入。例如,如果他们单击向左键和向上键,则我希望球沿西北方向移动。如果你们中有人发现问题的根源,我将非常感谢您的帮助! 发动机 CircleComponent 问题答案: 因为键事件将仅报告触发事件的最后一个键,所以您

  • 所以我在谷歌上搜索了这个,但我能在上面找到任何东西:我在代码中调用了这个方法 然后,我添加了一个JProgressBar,称为进度条,并在单击GUI上的按钮时调用此代码: Progresslabel只是一个显示进度的标签。现在,当我这样做时,进度条显示如下: http://i.imgur.com/gXp5ByH.png 与其他应用程序上的情况不同: http://i.imgur.com/M61Cd

  • 问题内容: 是否存在有关如何以一定速率读取长文件的文章/算法? 说我不想在发出读取数据时以每秒10 KB的速度通过。 问题答案: 粗略的解决方案是一次读取一个块,然后休眠,例如10k,然后休眠一秒钟。但是我要问的第一个问题是:为什么?有两个可能的答案: 您不希望创建工作比完成任务快。要么 您不想在系统上造成太大的负担。 我的建议是不要在读取级别上对其进行控制。这有点混乱和不准确。而是在工作结束时对

  • 我目前正在libgdx中试验不同的相机(使用ShapeRenderer)。然而,我发现在某些旋转时,它会停止渲染形状的部分。 例如,带有相机的正常形状 位置:(8.999996,7.699995,5.599995) 方向: (0.04838332,-0.60004705,-0.7576189): 但是,对于相机位置:(8.999996,7.699995,5.0999956)方向:(0.678907