Java 如何解决这些涉及坡度的多个问题?

Java 如何解决这些涉及坡度的多个问题?,java,Java,我想制作一段代码,使椭圆指向另一个点 原则很简单: int ellipseX = 30; int ellipseY = 30; int ellipse1X = MouseInfo.getPointerInfo().getLocation().x; int ellipse1Y = MouseInfo.getPointerInfo().getLocation().y; //m=(y2-y1)/(x2-x1) double slopex = ellipse1X/ellipseX; double slo

我想制作一段代码,使椭圆指向另一个点

原则很简单:

int ellipseX = 30;
int ellipseY = 30;
int ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
int ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
//m=(y2-y1)/(x2-x1)
double slopex = ellipse1X/ellipseX;
double slopey = ellipse1Y/ellipseY;
public void paintComponent(Graphics g){
    g.fillOval(ellipseX, ellipseY, 4, 4);
    ellipseX+=slopex;
    ellipseY+=slopey;
    repaint();
}
现在有几个问题-

  • double+int=double使其不能成为椭圆的可能“x”或“y”

  • 坡度不会更新,所以它只朝那个方向移动并保持那个方向


还有一大堆问题。如何解决这个问题?

我在代码中看到的第一个问题是,您正在存储将两个整数变量除以一个双精度的结果。如果选中,则双精度将包含一个整数值。相反,你应该按照

double myDouble = (numerator * 1.0) / denominator;

我在代码中看到的第一个问题是,您正在存储将2个整数变量除以一个double的结果。如果选中,则双精度将包含一个整数值。相反,你应该按照

double myDouble = (numerator * 1.0) / denominator;

如果你想让斜率跟随你的鼠标指针,那么你就把它加入到循环中-我不知道斜率会给你什么,我也不确定方程是否正确-回答你的这个问题-另请参见int+double

int ellipseX = 30;
int ellipseY = 30;
int ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
int ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
  double slopex = ellipse1X/ellipseX;
  double slopey = ellipse1Y/ellipseY;
while(true) {
  ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
  ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
  slopex = ellipse1X/ellipseX;
  slopey = ellipse1Y/ellipseY;
  ellipseX=(int)Math.rint(ellipseX+slopex);
  ellipseY=(int)Math.rint(ellipseY+slopey);
  repaint()
}

public void paintComponent(Graphics g){
    g.fillOval(ellipseX, ellipseY, 4, 4);
}

通常不应在paint()中调用repaint()

如果希望坡度跟随鼠标指针,则将其合并到循环中-我不知道坡度会给您带来什么,我也不确定公式是否正确-仅回答您的这个问题-另请参阅int+double

int ellipseX = 30;
int ellipseY = 30;
int ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
int ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
  double slopex = ellipse1X/ellipseX;
  double slopey = ellipse1Y/ellipseY;
while(true) {
  ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
  ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
  slopex = ellipse1X/ellipseX;
  slopey = ellipse1Y/ellipseY;
  ellipseX=(int)Math.rint(ellipseX+slopex);
  ellipseY=(int)Math.rint(ellipseY+slopey);
  repaint()
}

public void paintComponent(Graphics g){
    g.fillOval(ellipseX, ellipseY, 4, 4);
}

repaint通常不应在paint()中调用。

当您希望返回类型为double时,将两个整数除以有一个小技巧。在执行除法之前,需要将数字显式转换为双倍。下面是一个快速修复方法,我还将ellipseX和ellipseY的数据类型更改为double:

double ellipseX = 30;
double ellipseY = 30;
int ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
int ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
//m=(y2-y1)/(x2-x1)
double slopex = (double)ellipse1X/ellipseX;
double slopey = (double)ellipse1Y/ellipseY;
public void paintComponent(Graphics g){
    g.fillOval((int)ellipseX, (int)ellipseY, 4, 4);
    ellipseX+=slopex;
    ellipseY+=slopey;
    repaint();
}

当您期望返回类型为double时,将两个整数除有一个小技巧。在执行除法之前,需要将数字显式转换为双倍。下面是一个快速修复方法,我还将ellipseX和ellipseY的数据类型更改为double:

double ellipseX = 30;
double ellipseY = 30;
int ellipse1X = MouseInfo.getPointerInfo().getLocation().x;
int ellipse1Y = MouseInfo.getPointerInfo().getLocation().y;
//m=(y2-y1)/(x2-x1)
double slopex = (double)ellipse1X/ellipseX;
double slopey = (double)ellipse1Y/ellipseY;
public void paintComponent(Graphics g){
    g.fillOval((int)ellipseX, (int)ellipseY, 4, 4);
    ellipseX+=slopex;
    ellipseY+=slopey;
    repaint();
}

请发布完整的代码,这样我就可以在IDE中运行来复制您的问题请发布完整的代码,这样我就可以在IDE中运行来复制您的问题我想要的是一个不断向我的鼠标移动的椭圆,不是“绘画工具”,是的,但椭圆应该在一个窗口内(JPanel JFrame等)虽然鼠标可以在任何地方-也许你想要一个覆盖整个屏幕的窗口是的,这样做,找出上面所有的东西,我会接受。我想要的是一个不断朝我的鼠标移动的椭圆,不是一个“绘画工具”,是的,但椭圆应该在一个窗口内(JPanel JFrame等)虽然鼠标可以在任何地方,也许你想要一个覆盖整个屏幕的窗口是的,这样做,并找出所有的东西在那里,我会接受这一点。