我明白那个:
atan2(vector.y, vector.x)= 矢量和X轴之间的角度.
但我想知道如何使用atan2 获得两个向量之间的角度.所以我遇到了这个解决方案:
atan2(vector1.y - vector2.y, vector1.x - vector2.x)
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:
以下两个公式会产生相同的数字吗?
atan2(vector1.y - vector2.y, vector1.x - vector2.x)
atan2(vector2.y - vector1.y, vector2.x - vector1.x)
如果不是:我怎么知道减法中哪个矢量首先出现?
谢谢
我正在制作一个程序,根据C大调的随机基本和弦进程生成随机简单的旋律.
从这个音阶开始产生4个三和弦的和弦进行的好方法是什么?从量表生成4个完全随机的三元组(来自7个现有的三元组)通常听起来不太好.
我需要一种方法来产生听起来好或好的和弦进程,但我不想简单地从现有的进度池中随机选择一个进程.我仍然希望程序自己生成这4个三元组,使用一些简单的算法来确保生成的进程听起来不错.
(正如我所说,这4个三元组将分别取自C大调的7个三元组).
请注意:这个问题与我之前关于创建旋律创建算法的方法的问题不重复.这个是关于找到一种产生和弦进程的方法.生成旋律是一个不同的主题.
谢谢你的帮助
编辑:关于如何知道黑社会在另一个黑社会旁边听起来不错的一般指导方针,也会很棒.
让我们说我正在使用atan2两个向量之间的角度.
atan2给出弧度值.我使用Java中的内置函数将其转换为度数.这给了我之间的值0和180度之间0和-180(ATAN2的性质).
有没有办法将使用此功能接收的值(在转换为度数后)转换为标准的360度系统,而不改变角度 - 只有它的编写方式?这会让我更容易合作.
谢谢
我得到以下代码:
import java.awt.*;
import javax.swing.*;
public class GraphicPanel extends JPanel {
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setFont(new Font("Arial",Font.BOLD,24));
g2d.drawString("A",300,250);
g2d.rotate(45 * Math.PI/180);
g2d.drawString("B",300,250);
}
}
Run Code Online (Sandbox Code Playgroud)
它应该旋转B并将其放在A所在的相同位置,但是由于某种原因,B会在完全不同的位置出现。
我很确定我理解为什么。这是因为缩放,旋转等操作时会操纵整个协调系统(我正确吗?)
无论如何,我想知道如何旋转或缩放对象,并且仍然使它出现在以前的位置。例如,在一个游戏中,每10毫秒不断更新和显示一次自身,其中一个精灵正在旋转,但是仍然停留在10毫秒之前的位置。
编辑:试图事先搜索Google,猜想这个问题的措辞有点棘手,因为我发现没有帮助。
非常感谢 :)
这里的人们一直建议我使用Key Binding而不是KeyListenerJava 2D游戏.
每个人的优点和缺点是什么?2D游戏的关键绑定真的更好吗?
我有这个代码绘制一个矩形(Polygon对象),然后使用旋转矩阵绘制另一个原始的矩形,旋转90度.
public class DrawingPanel extends JPanel{
public void paintComponent(Graphics g){
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
Point p1,p2,p3,p4;
p1 = new Point(50,50);
p2 = new Point(200,50);
p3 = new Point(200,100);
p4 = new Point(50,100);
int[] x = {(int) p1.getX(), (int) p2.getX(), (int)p3.getX(), (int) p4.getX()};
int[] y = {(int) p1.getY(), (int) p2.getY(), (int)p3.getY(), (int) p4.getY()};
Polygon poly = new Polygon(x, y, x.length);
g2d.draw(poly);
p1.setLocation(p1.getX() * Math.cos(Math.toRadians(90)) - p1.getY() * Math.sin(Math.toRadians(90)),
p1.getX() * Math.sin(Math.toRadians(90)) + p1.getY() * Math.cos(Math.toRadians(90)));
p2.setLocation(p2.getX() * Math.cos(Math.toRadians(90)) - …Run Code Online (Sandbox Code Playgroud) 我在这里看到了几个关于音乐制作算法的问题.但它们都涉及复杂构图和不同风格和方法的算法.
我正在制作一个程序来创建C大调的简单旋律.我正在设计一个简单的算法来做到这一点,但有点卡住了.
我想知道我正在设计的算法是否是实现此类事情的良好"总体方向".你怎么看呢?这是一种正确的思维方式,还是你推荐另一种方法?
我目前的方法涉及只有16个四分音符的旋律,分为四个小节(这将是无聊的,因为它没有节奏.仅作为一个开始).这个怎么运作:
该程序首先将四个三和弦从音阶中随机化(音阶有7个和弦可供选择).然后为四个测量中的每一个指定一个和弦.
之后,程序会为每个度量的第一个音符分配一个四分音符.该笔记将成为构成该度量和弦的三个音符之一.(随机选择三个中的一个).
然后,程序将为每个度量的剩余3个时隙分配注释.这些音符将是前一音符的第二个音符,前一个音符的第二个音符,前一个音符的第三个音符或下一个音符的第三个音符.
这会产生一种听起来并不一定听起来不错的旋律,但听起来并不特别"糟糕".从某种意义上说,它"有效".
但正如我所说,我想知道是否有更好的方法来创建一个简单的旋律制作算法,如果我目前的方法有任何问题(当然,除了缺乏任何节奏多样性).
谢谢
我在Eclipse中编程.我永远不会改变Eclipse的默认编译设置或其他任何内容.
如果我的计算机上安装了JDK 7.如果我编译的Runnable JAR在较旧的JRE上运行有任何问题,假设旧的JRE支持我的所有程序功能吗?
例如,如果我在Eclipse中编写一个应用程序,并安装了最新的JDK - 程序是否应该在稍微旧的JRE上运行?
如果答案是"是" - 我该如何改变?如何允许我的程序在比我的JDK更旧的JRE上运行?谢谢
我正在制作一个游戏,应该有一个机器人在另一个机器人身上投掷球形物体.
抛出的球应该以对称弧形飞行.很确定这个数学词是一个抛物线.
两个机器人都在x轴上.
我如何在游戏中实现这样的功能?我尝试了不同的方法,但都没有效果
当前在我的游戏中移动物体的系统是这样的:每个物体都有x和y坐标(变量)dx和dy变量.
每个对象都有一个move()方法,可以在游戏循环的每个循环中调用它.它只是增加了dx对x与dy对y.
如何在我的系统中实现我所描述的内容?
如果涉及到很多数学,请尝试以简单的方式解释,因为我对数学不太了解.
我的情况:

非常感谢
我正在用Java编程Java.
我最近尝试在我的程序中播放声音文件.我这样做了:
URL url = this.getClass().getResource("ih.wav");
audioIn = AudioSystem.getAudioInputStream(url);
clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
Run Code Online (Sandbox Code Playgroud)
这只有用,当我试图将ih.wav放在bin文件夹中时,好像bin文件夹是我项目的"基本文件夹".将文件放在项目的主文件夹中,不起作用.将它放在src文件夹中,也不起作用.
有人可以向我解释将我的资源用于Java程序的位置吗?另外,如果我将资源导入Eclipse中,这有关系吗?谢谢
编辑:
试图在主项目文件夹中创建一个资源文件夹,仍然给我一个NullPointerException:
URL url1 = this.getClass().getResource("res/ah.wav");
audioIn = AudioSystem.getAudioInputStream(url1);
clip1 = AudioSystem.getClip();
clip1.open(audioIn);
URL url2 = this.getClass().getResource("res/eh.wav");
audioIn = AudioSystem.getAudioInputStream(url2);
clip2 = AudioSystem.getClip();
clip2.open(audioIn);
URL url3 = this.getClass().getResource("res/ih.wav");
audioIn = AudioSystem.getAudioInputStream(url3);
clip3 = AudioSystem.getClip();
clip3.open(audioIn);
clip1.start();
clip2.start();
clip3.start();
Run Code Online (Sandbox Code Playgroud) java ×5
math ×3
swing ×3
algorithm ×2
eclipse ×2
geometry ×2
rotation ×2
vector ×2
2d-games ×1
atan2 ×1
awt ×1
game-physics ×1
graphics2d ×1
key-bindings ×1
keylistener ×1
matrix ×1
polygon ×1
project ×1
resources ×1
trigonometry ×1