Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使矩形与圆相切_Java_Javafx - Fatal编程技术网

Java 如何使矩形与圆相切

Java 如何使矩形与圆相切,java,javafx,Java,Javafx,我试着让一个矩形物体绕着一个圆旋转,矩形总是与它所绕的圆相切。我有代码可以让它绕着圆转,但我不知道如何使它与圆相切。到目前为止,情况就是这样 我正在使用一个动画计时器,因为我不知道矩形将遵循的完整路径,因为如果我发现有东西阻挡它,它可能会改变。 我可以使矩形以平滑的方式围绕圆旋转,但我不知道如何使矩形与圆相切 public void moveInCircle(double radius) { double newX = getX() + (radius * Math.cos(Mat

我试着让一个矩形物体绕着一个圆旋转,矩形总是与它所绕的圆相切。我有代码可以让它绕着圆转,但我不知道如何使它与圆相切。到目前为止,情况就是这样

我正在使用一个动画计时器,因为我不知道矩形将遵循的完整路径,因为如果我发现有东西阻挡它,它可能会改变。 我可以使矩形以平滑的方式围绕圆旋转,但我不知道如何使矩形与圆相切

 public void moveInCircle(double radius)
   {

  double newX = getX() + (radius * Math.cos(Math.toDegrees(angle)));
  double newY = getY() + (radius * Math.sin(Math.toDegrees(angle)));
  vehicle.setTranslateX(newX);
  vehicle.setTranslateY(newY);

   }

我知道切线将是相邻边(x)除以相对边(y),但我不知道如何合并它。

我建议使用
旋转
变换。这样,您只需要设置初始位置和轴心点,并且可以限制对
Rotate.angle
属性的更新

下面的示例使用
时间线
来设置属性的动画,但这可以通过
moveCircle
方法通过使用
rotate.setAngle(angleDegrees)轻松完成


顺便说一句:你的代码下面的部分看起来很奇怪

double newX = getX() + (radius * Math.cos(Math.toDegrees(angle)));
double newY = getY() + (radius * Math.sin(Math.toDegrees(angle)));

Math.sin
Math.cos
期望的是弧度,而不是度。你要么需要使用托拉迪安,要么不需要转换…

你在代码的最后一部分是对的…奇怪的是,它可以工作。我需要做那个部分。我需要让车辆改变车道,我正在考虑让它旋转,直行,直到它位于下一条车道的中心,然后旋转,这样它就可以跟随它改变的新车道。时间轴似乎比使用动画计时器有更多的优势,因为我可以使用内置的方法,而不必使用我自己的旋转方法并遵循循环路径。
double newX = getX() + (radius * Math.cos(Math.toDegrees(angle)));
double newY = getY() + (radius * Math.sin(Math.toDegrees(angle)));