gpt4 book ai didi

java - 如何获取两点之间的距离并沿线移动一个点到达另一点

转载 作者:行者123 更新时间:2023-11-30 02:59:21 25 4
gpt4 key购买 nike

我正在尝试将一个点(100,100)移动到另一个点(450,500)。为此,我通过减去:int dx = x2 - x1,然后减去:int dy = y2 - y1来获得点之间的距离。我得到 dy (dy/100) * 1; 的 1% 和 dx (dx/100) * 1; 的 1%。然后,我将 x1 和 y1 中各值的 1% 添加到沿 JFrame 移动该点以到达第二个点。

出于某种原因,当我在 tick() 方法中移动该点时,它会错过第二个点。我尝试了多种不同的方法来实现这一目标。我认为这是数学计算错误,或者我正在做一些根本错误的事情。

这是我的代码:

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;

import javax.swing.JFrame;


public class Distance extends JFrame implements Runnable {

private int x1, y1;
private int x2, y2;
private int width, height;

private int dx, dy;

public Distance() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(850, 600);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);

init();
}

private void init() {
x1 = y1 = 100;
x2 = 450;
y2 = 500;
width = height = 20;

dx = x2 - x1;
dy = y2 - y1;

Thread thread = new Thread(this);
thread.start();
}

@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillOval(x1, y1, width, height);
g.fillOval(x2, y2, width, height);
repaint();
}

private void tick() {
int moveX = (dx / 100) * 1;
int moveY = (dy / 100) * 1;
x1 += moveX;
y1 += moveY;
}

@Override
public void run() {
while(true) {
try {
tick();
Thread.sleep(100);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
new Distance();
}
}

最佳答案

您应该使用double而不是int,否则,您将失去精度。

由于 fillOval 仅接受 int 作为参数,因此您必须对它们进行强制转换,但不用担心,它不会影响渲染。

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;


public class Distance extends JFrame implements Runnable {

private double x1, y1;
private double x2, y2;
private double width, height;

private double dx, dy;

public Distance() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(850, 600);
setResizable(false);
setLocationRelativeTo(null);
setVisible(true);

init();
}

private void init() {
x1 = y1 = 100;
x2 = 450;
y2 = 500;
width = height = 20;

dx = x2 - x1;
dy = y2 - y1;

Thread thread = new Thread(this);
thread.start();
}

@Override
public void paint(Graphics g) {
g.setColor(Color.BLACK);
g.fillOval((int)x1, (int)y1, (int)width, (int)height);
g.fillOval((int)x2, (int)y2, (int)width, (int)height);
repaint();
}

private void tick() {
double moveX = (dx / 100) * 1;
double moveY = (dy / 100) * 1;
x1 += moveX;
y1 += moveY;
}

@Override
public void run() {
while(true) {
try {
tick();
Thread.sleep(100);
} catch(InterruptedException e) {
e.printStackTrace();
}
}
}

public static void main(String[] args) {
new Distance();
}
}

关于java - 如何获取两点之间的距离并沿线移动一个点到达另一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36356820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com